Från och med MongoDB 2.4 är det inte längre nödvändigt att förlita sig på ett unikt index (eller någon annan lösning) för atomic findOrCreate
som operationer.
Detta tack vare $setOnInsert
operatör ny till 2.4, som låter dig ange uppdateringar som endast ska ske när du infogar dokument.
Detta i kombination med upsert
alternativet betyder att du kan använda findAndModify
för att uppnå en atomär findOrCreate
-liknande operation.
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
})
Som $setOnInsert
påverkar endast dokument som infogas, om ett befintligt dokument hittas kommer ingen ändring att ske. Om det inte finns något dokument, kommer det att lägga upp ett med det angivna _id, och sedan utföra insättningsuppsättningen. I båda fallen returneras dokumentet.