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

Cómo verificar si $addToSet de Mongo era un duplicado o no

Al menos en el shell puedes diferenciar si el documento fue modificado o no (ver nModified ).

> db.test4.update({_id:2}, {$addToSet: {tags: "xyz" }})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

> db.test4.update({_id:2}, {$addToSet: {tags: "xyz" }})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })

Actualización para Nodo

Cuando usa collection.update(criteria, update[[, options], callback]); puede recuperar el recuento de registros que se modificaron.

Desde el nodo docs

Otra actualización

Parece que al menos en la versión 1.4.3, el controlador nativo de Mongo Node no se comporta como se documenta. Es posible evitar el uso de la API masiva (introducida en Mongo 2.6):

var col = db.collection('test');
// Initialize the Ordered Batch
var batch = col.initializeOrderedBulkOp();
batch.find({a: 2}).upsert().updateOne({"$addToSet": {"tags": "newTag"}});
// Execute the operations
batch.execute(function(err, result) {
  if (err) throw err;
  console.log("nUpserted: ", result.nUpserted); 
  console.log("nInserted: ", result.nInserted); 
  console.log("nModified: ", result.nModified); // <- will tell if a value was added or not
  db.close();
});