MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Tirare e aggiungere contemporaneamente a mongo

L'errore è praticamente ciò che significa in quanto non è possibile agire su due cose dello stesso "percorso" nella stessa operazione di aggiornamento. I due operatori che stai utilizzando non elaborano in sequenza come potresti pensare.

Puoi farlo con il più "sequenziale" che puoi eventualmente ottenere con l'API delle operazioni "in blocco" o un'altra forma di aggiornamento "in blocco". Entro ragione ovviamente, e anche al contrario:

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

bulk.execute();

Non è una garanzia che nient'altro tenterà di modificare, ma è il più vicino possibile al momento.

Vedi anche il comando "aggiorna" grezzo con più documenti.