sql >> Databasteknik >  >> NoSQL >> MongoDB

flera mongo-uppdateringsoperatör i ett enda uttalande?

Flera uppdateringar kan utföras på samma dokument, så länge som dessa uppdateringar inte kommer i konflikt (därav felet "har motstridiga mods i uppdateringen").

Eftersom "$push" :{"bugs" :[{"name":"bug1", "count":1}]} och "$inc" :{"bugs.0.count" :1} båda försöker ändra samma del av dokumentet (nämligen "buggar"-arrayen), de kommer i konflikt.

Flera uppdateringar kan kombineras om var och en påverkar olika delar av dokumentet:

till exempel:

> 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." }
> 

Uppdateringen innehöll tre olika operationer ($pushAll, $inc och $set), men kunde slutföras framgångsrikt, eftersom varje operation påverkade en annan del av dokumentet.

Jag inser att detta inte är exakt vad du hoppades göra, men förhoppningsvis kommer det att ge dig lite bättre förståelse för hur uppdateringar fungerar, och kanske ge några idéer om hur dina uppdateringar och/eller dokument kan omstruktureras för att utföra den funktionalitet som din ansökan kräver. Lycka till.




  1. Mongoose TypeError:Användaren är inte en konstruktör

  2. Importera en JSON-fil till MongoDB med mongoimport

  3. Undvik att aktuell URL-strängparser är utfasad varning genom att ställa in useNewUrlParser till true

  4. Hur fungerar sorteringen i den nya mongodb PECL-förlängningen?