Ab MongoDB 2.4 ist es nicht mehr erforderlich, sich auf einen eindeutigen Index (oder eine andere Problemumgehung) für atomisches findOrCreate
zu verlassen wie Operationen.
Dies ist dem $setOnInsert
zu verdanken Operator neu auf 2.4, mit dem Sie Aktualisierungen angeben können, die nur beim Einfügen von Dokumenten erfolgen sollen.
Dies, kombiniert mit dem upsert
Option bedeutet, dass Sie findAndModify
verwenden können um ein atomares findOrCreate
zu erreichen -ähnlicher Betrieb.
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
wirkt sich nur auf Dokumente aus, die eingefügt werden, wenn ein vorhandenes Dokument gefunden wird, erfolgt keine Änderung. Wenn kein Dokument vorhanden ist, wird es eines mit der angegebenen _id einfügen und dann den Nur-Einfügen-Satz ausführen. In beiden Fällen wird das Dokument zurückgegeben.