Supposons que nous disposons de la collection suivante, j'ai quelques questions à propos de:
{
"_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 - je veux augmenter le prix pour "item_name":"my_item_two" et si il n'existe pas, il doit être annexé à les "éléments" de la matrice.
2 - Comment puis-je mettre à jour deux champs en même temps. Par exemple, augmenter le prix pour "my_item_three" et en même temps d'augmenter le "total" (avec la même valeur).
Je préfère le faire sur le MongoDB côté, sinon, je dois charger le document dans le côté client (Python) et de construire le document mis à jour et de le remplacer avec celui existant dans MongoDB.
Mise à JOUR C'est ce que j'ai essayé et qui fonctionne bien SI L'Objet Existe :
db.test_invoice.update({user_id : 123456 , "items.item_name":"my_item_one"} , {$inc: {"items.$.price": 10}})
Mais si la clé n'existe pas, il ne fait rien. Aussi, il ne met à jour l'objet imbriqué. Il n'y a aucune manière avec cette commande pour mettre à jour le "total" de terrain.