MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoDB atomic findOrCreate :findOne, insérer si inexistant, mais ne pas mettre à jour

À partir de MongoDB 2.4, il n'est plus nécessaire de s'appuyer sur un index unique (ou toute autre solution de contournement) pour findOrCreate atomique comme les opérations.

C'est grâce au $setOnInsert opérateur nouveau dans la version 2.4, qui vous permet de spécifier les mises à jour qui ne doivent se produire que lors de l'insertion de documents.

Ceci, combiné avec le upsert option, signifie que vous pouvez utiliser findAndModify pour obtenir un findOrCreate atomique -opération similaire.

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
})

Comme $setOnInsert n'affecte que les documents en cours d'insertion, si un document existant est trouvé, aucune modification n'aura lieu. Si aucun document n'existe, il en insérera un avec le _id spécifié, puis effectuera l'ensemble d'insertion uniquement. Dans les deux cas, le document est renvoyé.