Supposons que nous ayons la collection suivante, sur laquelle j'ai quelques questions:
{
"_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 souhaite augmenter le prix de "item_name": "my_item_two" et s'il n'existe pas , il doit être ajouté au tableau "items".
2 - Comment mettre à jour deux champs en même temps. Par exemple, augmentez le prix de "my_item_three" et en même temps augmentez le "total" (avec la même valeur).
Je préfère le faire du côté de MongoDB, sinon je dois charger le document côté client (Python) et construire le document mis à jour et le remplacer par celui existant dans MongoDB.
MISE À JOUR Voici ce que j'ai essayé et qui fonctionne très 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, elle ne fait rien. De plus, il ne met à jour que l'objet imbriqué. Il n'y a aucun moyen avec cette commande de mettre à jour le champ "total" également.