MongoDB - Aktualizuj obiekty w tablicy dokumentu (aktualizacja zagnieżdżona)
Załóżmy, że mamy następującą kolekcję, na którą mam kilka pytań:
<code>{ "_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 } ] } </code>
1 - Chcę podwyższyć cenę za „item_name”: „my_item_two”a jeśli nie istnieje, powinien być dołączony do tablicy „items”.
2 - Jak mogę zaktualizować dwa pola w tym samym czasie. Na przykład, podnieś cenę „my_item_three” i jednocześnie zwiększ „total” (o tej samej wartości).
Wolę to zrobić po stronie MongoDB, w przeciwnym razie muszę załadować dokument po stronie klienta (Python) i skonstruować zaktualizowany dokument i zastąpić go istniejącym dokumentem w MongoDB.
AKTUALIZACJA To właśnie próbowałem i działa dobrzeJEŚLI obiekt istnieje :
<code>db.test_invoice.update({user_id : 123456 , "items.item_name":"my_item_one"} , {$inc: {"items.$.price": 10}}) </code>
Ale jeśli klucz nie istnieje, nic nie robi. Aktualizuje również tylko zagnieżdżony obiekt. Za pomocą tego polecenia nie można również zaktualizować pola „total”.