Počínaje MongoDB 2.4 již není nutné spoléhat se na jedinečný index (nebo jakékoli jiné řešení) pro atomické findOrCreate
jako operace.
Je to díky $setOnInsert
operátor new to 2.4, který umožňuje specifikovat aktualizace, ke kterým by mělo dojít pouze při vkládání dokumentů.
To v kombinaci s upsert
znamená, že můžete použít findAndModify
k dosažení atomového findOrCreate
-jako operace.
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
})
Jako $setOnInsert
ovlivňuje pouze vkládané dokumenty, pokud je nalezen existující dokument, nedojde k žádné změně. Pokud žádný dokument neexistuje, převede dokument se zadaným _id a poté provede sadu pouze vložení. V obou případech je dokument vrácen.