A partire da MongoDB 2.4, non è più necessario fare affidamento su un indice univoco (o qualsiasi altra soluzione alternativa) per atomic findOrCreate
come le operazioni.
Questo grazie a $setOnInsert
operatore nuovo alla 2.4, che consente di specificare gli aggiornamenti che dovrebbero avvenire solo durante l'inserimento di documenti.
Questo, combinato con il upsert
opzione, significa che puoi usare findAndModify
per ottenere un findOrCreate
atomico -come operazione.
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
})
Come $setOnInsert
interessa solo i documenti inseriti, se viene trovato un documento esistente, non si verificherà alcuna modifica. Se non esiste alcun documento, ne inserirà uno con l'_id specificato, quindi eseguirà l'inserimento solo impostato. In entrambi i casi il documento viene restituito.