Fra og med MongoDB 2.4 er det ikke længere nødvendigt at stole på et unikt indeks (eller nogen anden løsning) for atomic findOrCreate som operationer.
Dette er takket være $setOnInsert operatør ny til 2.4, som giver dig mulighed for at angive opdateringer, som kun skal ske, når du indsætter dokumenter.
Dette kombineret med upsert option, betyder, at du kan bruge findAndModify for at opnå en atomisk findOrCreate -lignende 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åvirker kun dokumenter, der indsættes, hvis et eksisterende dokument findes, vil der ikke ske nogen ændring. Hvis der ikke eksisterer et dokument, vil det ophæve et med det angivne _id, og derefter udføre kun indsættelsessættet. I begge tilfælde returneres dokumentet.