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”.

questionAnswers(2)

yourAnswerToTheQuestion