Припустимо, у нас є така колекція, до якої у мене є кілька питань:
{
"_id" : ObjectId("4faaba123412d654fe83hg876"),
"user_id" : 123456,
"total" : 100,
"items" : [
{
"item_name" : "my_item_one",
"price" : 20
},
{
"item_name" : "my_item_two",
"price" : 50
},
{
"item_name" : "my_item_three",
"price" : 30
}
]
}
1 - Я хочу збільшити ціну на "item_name": "my_item_two", і якщо вона не існує , її слід додати до масиву "items".
2 - Як я можу оновити два поля одночасно. Наприклад, збільшити ціну на "my_item_three" і одночасно збільшити "загальну" (з однаковим значенням).
Я вважаю за краще це робити на стороні MongoDB, інакше мені доведеться завантажити документ на стороні клієнта (Python) та сконструювати оновлений документ та замінити його на існуючий у MongoDB.
ОНОВЛЕННЯ Це те, що я спробував і чудово працює, якщо об’єкт існує :
db.test_invoice.update({user_id : 123456 , "items.item_name":"my_item_one"} , {$inc: {"items.$.price": 10}})
Але якщо ключа немає, він нічого не робить. Також він лише оновлює вкладений об'єкт. За допомогою цієї команди немає можливості також оновити поле "загальний".