Supponiamo di avere la seguente raccolta, di cui ho alcune domande:
{
"_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 - Voglio aumentare il prezzo per "item_name": "my_item_two" e se non esiste , dovrebbe essere aggiunto alla matrice "items".
2 - Come posso aggiornare due campi contemporaneamente. Ad esempio, aumentare il prezzo per "my_item_three" e contemporaneamente aumentare il "totale" (con lo stesso valore).
Preferisco farlo sul lato MongoDB, altrimenti devo caricare il documento sul lato client (Python) e costruire il documento aggiornato e sostituirlo con quello esistente in MongoDB.
AGGIORNAMENTO Questo è quello che ho provato e funziona bene SE L'oggetto esiste :
db.test_invoice.update({user_id : 123456 , "items.item_name":"my_item_one"} , {$inc: {"items.$.price": 10}})
Ma se la chiave non esiste non fa nulla. Inoltre aggiorna solo l'oggetto nidificato. Non è possibile con questo comando aggiornare anche il campo "totale".