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