sql >> Database >  >> NoSQL >> MongoDB

MongoDB atomaire findOrCreate:findOne, invoegen indien niet aanwezig, maar niet bijwerken

Vanaf MongoDB 2.4 is het niet langer nodig om te vertrouwen op een unieke index (of een andere tijdelijke oplossing) voor atomaire findOrCreate zoals bewerkingen.

Dit is te danken aan de $setOnInsert operator nieuw voor 2.4, waarmee u updates kunt specificeren die alleen zouden moeten gebeuren bij het invoegen van documenten.

Dit, gecombineerd met de upsert optie, betekent dat u findAndModify . kunt gebruiken om een ​​atomaire findOrCreate . te bereiken -achtige bewerking.

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 heeft alleen invloed op documenten die worden ingevoegd, als een bestaand document wordt gevonden, vindt er geen wijziging plaats. Als er geen document bestaat, zal het er een met de gespecificeerde _id invoegen en vervolgens de set alleen invoegen uitvoeren. In beide gevallen wordt het document geretourneerd.



  1. Tijdelijke fout in herdistributie van naam

  2. De naam van een veld in een MongoDB-verzameling wijzigen

  3. Hoe registreer ik mijn vragen in MongoDB C# Driver 2.0?

  4. Modellering voor vriendenschema in mangoest?