MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Tirez et ajoutez en même temps avec mongo

L'erreur est à peu près ce que cela signifie car vous ne pouvez pas agir sur deux choses du même "chemin" dans la même opération de mise à jour. Les deux opérateurs que vous utilisez ne traitent pas séquentiellement comme vous pourriez le penser.

Vous pouvez le faire aussi "séquentiellement" que possible avec l'API d'opérations "en masse" ou une autre forme de mise à jour "en masse". Dans la limite du raisonnable bien sûr, et aussi à l'envers :

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

bulk.execute();

Ce n'est pas une garantie que rien d'autre n'essaiera de modifier, mais c'est aussi proche que vous le ferez actuellement.

Voir également la commande "mise à jour" brute avec plusieurs documents.