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

Come verificare se $ addToSet di Mongo era un duplicato o meno

Almeno nella shell puoi distinguere se il documento è stato modificato o meno (vedi 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 })

Aggiornamento per Node

Quando utilizzi collection.update(criteria, update[[, options], callback]); puoi recuperare il conteggio dei record che sono stati modificati.

Dal nodo documenti

Un altro aggiornamento

Sembra che almeno nella versione 1.4.3 il driver Mongo Node nativo non si comporti come documentato. È possibile aggirare il problema utilizzando l'API di massa (introdotta in 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();
});