Vanaf MongoDB 2.4 is het niet langer nodig om te vertrouwen op een unieke index (of een andere tijdelijke oplossing) voor atomaire findOrCreate
zoals bewerkingen.
Dit is te danken aan de $setOnInsert
operator nieuw voor 2.4, waarmee u updates kunt specificeren die alleen zouden moeten gebeuren bij het invoegen van documenten.
Dit, gecombineerd met de upsert
optie, betekent dat u findAndModify
. kunt gebruiken om een atomaire findOrCreate
. te bereiken -achtige bewerking.
db.collection.findAndModify({
query: { _id: "some potentially existing id" },
update: {
$setOnInsert: { foo: "bar" }
},
new: true, // return new doc if one is upserted
upsert: true // insert the document if it does not exist
})
Als $setOnInsert
heeft alleen invloed op documenten die worden ingevoegd, als een bestaand document wordt gevonden, vindt er geen wijziging plaats. Als er geen document bestaat, zal het er een met de gespecificeerde _id invoegen en vervolgens de set alleen invoegen uitvoeren. In beide gevallen wordt het document geretourneerd.