À 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é.