MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

mehrere Mongo-Update-Operatoren in einer einzigen Anweisung?

Mehrere Aktualisierungen können für dasselbe Dokument durchgeführt werden, solange diese Aktualisierungen nicht miteinander in Konflikt stehen (daher der Fehler „Konfliktive Mods in Aktualisierung enthalten“).

Weil "$push" :{"bugs" :[{"name":"bug1", "count":1}]} und "$inc" :{"bugs.0.count" :1} beide versuchen denselben Teil des Dokuments ändern (nämlich das "Bugs"-Array), stehen sie in Konflikt.

Mehrere Aktualisierungen können kombiniert werden, wenn jede einen anderen Teil des Dokuments betrifft:

zum Beispiel:

> db.test.drop()
true
> db.test.save({ "_id" : 1, "name" : "albert", "bugs" : [ ] })
> db.test.update({"name":"albert"}, {"$pushAll" : {"bugs" : [{"name":"bug1", "count":1}]}, "$inc" : {"increment" : 1}, $set:{"note":"Here is another field."}})
> db.test.find()
{ "_id" : 1, "bugs" : [ { "name" : "bug1", "count" : 1 } ], "increment" : 1, "name" : "albert", "note" : "Here is another field." }
> 

Das Update enthielt drei verschiedene Operationen ($pushAll, $inc und $set), konnte aber erfolgreich abgeschlossen werden, da jede Operation einen anderen Teil des Dokuments betraf.

Mir ist klar, dass dies nicht genau das ist, was Sie sich erhofft haben, aber hoffentlich wird es Ihnen ein wenig besseres Verständnis dafür vermitteln, wie Updates funktionieren, und vielleicht einige Ideen liefern, wie Ihre Updates und/oder Dokumente umstrukturiert werden können, um die von Ihnen gewünschte Funktionalität auszuführen Anwendung erfordert. Viel Glück.