sql >> Database >  >> NoSQL >> MongoDB

meerdere mongo-update-operator in een enkele verklaring?

Er kunnen meerdere updates op hetzelfde document worden uitgevoerd, zolang die updates niet conflicteren (vandaar de foutmelding "hebben conflicterende mods in update").

Omdat "$push" :{"bugs" :[{"name":"bug1", "count":1}]} en "$inc" :{"bugs.0.count" :1} beide proberen om hetzelfde deel van het document wijzigen (namelijk de "bugs"-array), conflicteren ze.

Meerdere updates kunnen worden gecombineerd als elk een ander deel van het document beïnvloedt:

bijvoorbeeld:

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

De update bevatte drie verschillende bewerkingen ($pushAll, $inc en $set), maar kon met succes worden voltooid, omdat elke bewerking een ander deel van het document beïnvloedde.

Ik realiseer me dat dit niet precies is wat u hoopte te doen, maar hopelijk geeft het u een beetje beter inzicht in hoe updates werken en geeft het misschien enkele ideeën over hoe uw updates en/of documenten kunnen worden geherstructureerd om de functionaliteit uit te voeren die uw aanvraag vereist. Veel geluk.




  1. Sorteren op virtueel veld in mongoDB (mangoest)

  2. Geef een verwijzing naar een Redis-instantie door aan een Gorilla/Mux Handler

  3. Een element verwijderen uit een dubbel geneste array in een MongoDB-document.

  4. Voorwaardelijke Redis ingesteld / alleen bijwerken met nieuwste versie?