MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB atomar findOrCreate:findOne, einfügen, falls nicht vorhanden, aber nicht aktualisieren

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.