Я пытаюсь улучшить производительность своего приложения и свои знания MongoDB.Мне удалось выполнить запрос на запуск и забыть, который создает поля, если они не существуют, и в противном случае увеличивает значение следующим образом:
date = "2018-6"
sid = "012345"
cid = "06789"
key = "MESSAGES.{}.{}.{}.{}".format(date, sid, cid, hour)
db.stats.update({}, { "$inc": { key : 1 }})
Это создает один документ со следующей структурой:
document:
{
"MESSAGES": {
"2018-6": {
"012345": {
"06789": 1
},
"011111": {
"06667": 5
}
},{
"2018-5": {
"012345": {
"06789": 20
},
"011111": {
"06667": 15
}
}
}
}
Как вы, вероятно, можете себе представить, это стало кошмаром для запроса этой структуры с увеличением объема данных.Я хотел бы добиться того же самого запроса и забыть, но с реализацией лучшей индексируемой схемы.Что-то вроде:
документов:
[{
"SID": "012345",
"MESSAGES: {
"MONTHS": {
"KEY": "2018-6",
"CHANNELS": {
"KEY": "06789",
"COUNT": 1
}
},{
"KEY": "2018-5",
"CHANNELS": {
"KEY": "06667",
"COUNT": 20
}
}
}
},
{
"SID": "011111",
"MESSAGES: {
"MONTHS": {
"KEY": "2018-6",
"CHANNELS": {
"KEY": "06667",
"COUNT": 5
}
},{
"KEY": "2018-5",
"CHANNELS": {
"KEY": "06667",
"COUNT": 15
}
}
}
}]
Я работаю с довольно большим объемом данных, и эти запросы могут выполняться много раз в секунду, поэтому важно, чтобы я просто выполнял что-тоодин раз, если это вообще возможно.Любой совет, который вы можете дать, очень приветствуется, не стесняйтесь критиковать все, что вы видите здесь, так как моя цель - учиться.
Заранее спасибо!
ОБНОВЛЕНО ПОПЫТОКОМ:
db.test.updateOne({"SERVER_ID": "23894723487sdf"}, {
"$addToSet" : {
"MESSAGES" : {
"DATE": "2018-6",
"CHANNELS": [{
"ID": "239048349",
"COUNT": NumberInt(1)
}]
}
},
"$inc" : {
"MESSAGES.CHANNELS.$.COUNT" : 1
}},
{upsert: true})