MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

MongoDB atomic findOrCreate:findOne, inserisci se inesistente, ma non aggiorna

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.