Angenommen, wir haben die folgende Sammlung, zu der ich einige Fragen habe:
{
"_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 - Ich möchte den Preis für "item_name" erhöhen: "my_item_two". Wenn er nicht vorhanden ist , sollte er an das Array "items" angehängt werden.
2 - Wie kann ich zwei Felder gleichzeitig aktualisieren? Erhöhen Sie beispielsweise den Preis für "my_item_three" und erhöhen Sie gleichzeitig die "Summe" (mit demselben Wert).
Ich bevorzuge dies auf der MongoDB-Seite, andernfalls muss ich das Dokument auf der Clientseite (Python) laden und das aktualisierte Dokument erstellen und durch das vorhandene in MongoDB ersetzen.
UPDATE Dies ist, was ich versucht habe und funktioniert gut, wenn das Objekt existiert :
db.test_invoice.update({user_id : 123456 , "items.item_name":"my_item_one"} , {$inc: {"items.$.price": 10}})
Aber wenn der Schlüssel nicht existiert, tut er nichts. Außerdem wird nur das verschachtelte Objekt aktualisiert. Mit diesem Befehl kann auch das Feld "total" nicht aktualisiert werden.