sql >> Base de Datos >  >> NoSQL >> MongoDB

MongoDB atomic findOrCreate:findOne, inserte si no existe, pero no actualice

A partir de MongoDB 2.4, ya no es necesario confiar en un índice único (o cualquier otra solución) para findOrCreate atómico como operaciones.

Esto es gracias a $setOnInsert operador nuevo en 2.4, que le permite especificar actualizaciones que solo deberían ocurrir al insertar documentos.

Esto, combinado con el upsert opción, significa que puede usar findAndModify para lograr un findOrCreate atómico -como operación.

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

Como $setOnInsert solo afecta a los documentos que se insertan, si se encuentra un documento existente, no se producirá ninguna modificación. Si no existe ningún documento, insertará uno con el _id especificado y luego realizará el conjunto de inserción solamente. En ambos casos se devuelve el documento.