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.