sql >> Databasteknik >  >> NoSQL >> MongoDB

Dra och lägg till samtidigt med mongo

Felet är i stort sett vad det betyder eftersom du inte kan agera på två saker av samma "sökväg" i samma uppdateringsoperation. De två operatorerna du använder bearbetar inte sekventiellt som du kanske tror att de gör.

Du kan göra detta med så "sekventiell" som du möjligen kan få med "bulk" operations API eller annan form av "bulk" uppdatering. Inom rimliga gränser förstås, och även omvänt:

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

bulk.execute();

Inte en garanti för att inget annat kommer att försöka ändra, men det är så nära som du för närvarande kommer.

Se även det råa "update"-kommandot med flera dokument.



  1. använder för mongodb ObjectId skapande tid

  2. Använda map/reduce för att kartlägga egenskaperna i en samling

  3. Hur man ansluter till MySQL utan root-lösenord på terminal

  4. Felsökning av problem