Учитывая следующему дБОбновления на подмножестве вложенных документов в MongoDB
{
"type":"s",
"disp":[
{
"quantity":1,
"date":20141109
},
{
"quantity":1,
"date":20141110
},
{
"quantity":1,
"date":20141111
}
]
},
{
"type":"d",
"disp":[
{
"quantity":1,
"date":20141109
},
{
"quantity":0,
"date":20141110
},
{
"quantity":1,
"date":20141111
}
]
}
я выполнить запрос, чтобы получить «тип» с количеством терки затем 0 для набора дат
db.test.find({ "$and" : [
{ "disp" : { "$elemMatch" : { "quantity" : { "$gt" : 0 }, "date" : 20141109 } } },
{ "disp" : { "$elemMatch" : { "quantity" : { "$gt" : 0 }, "date" : 20141110 } } }
] },{"type":1})
Я получаю тип «s», тогда я хочу уменьшить на 1 только количество для дат, которые я только что запросил
Я пробовал разные виды запросов на обновление, но я смог изменить только одно поле количества.
Как я могу это сделать атомным путем? Если это невозможно, вы можете посоветовать мне способ структурирования моих данных для запроса и атомического обновления количества для определенных дат?
Интересно, если запрос документ, изменить его в памяти и обновлять его в целом не лучше, чем несколько обновлений ... BTW дублированные даты опечатка, я редактировал его;) – Edo
Если количество соответствующих поддоменов значительно велико, тогда да, лучше справиться с этим на стороне клиента. Модифицировать и обновлять все вспомогательные документы, иначе это нормально. – BatScream
У меня проблема с параллелизмом. Я должен избегать двух совпадающих совпадений запросов, потому что первый из них частично обновляет отдельные даты. В противном случае мне придется управлять откатом ... – Edo