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

Ziehen und addtoset gleichzeitig mit Mongo

Der Fehler ist so ziemlich das, was er bedeutet, da Sie nicht auf zwei Dinge desselben "Pfads" im selben Aktualisierungsvorgang reagieren können. Die beiden Operatoren, die Sie verwenden, werden nicht nacheinander verarbeitet, wie Sie vielleicht denken.

Sie können dies jedoch so "sequentiell" tun, wie Sie es möglicherweise mit der API für "Massen"-Operationen oder einer anderen Form der "Massen"-Aktualisierung erreichen können. Natürlich im Rahmen des Zumutbaren und auch umgekehrt:

var bulk = db.coll.initializeOrderedBulkOp();
bulk.find({ "tags": 1 }).updateOne({ "$addToSet": { "tags":  2 } });
bulk.find({ "tags": 1 }).updateOne({ "$pull": { "tags": 1 } });

bulk.execute();

Keine Garantie, dass nichts anderes versuchen wird, Änderungen vorzunehmen, aber es ist so nah wie möglich.

Siehe auch den rohen "update"-Befehl mit mehreren Dokumenten.