Au moins dans le shell vous pouvez différencier si le document a été modifié ou non (voir 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 })
Mise à jour pour le nœud
Lorsque vous utilisez collection.update(criteria, update[[, options], callback]);
vous pouvez récupérer le nombre d'enregistrements qui ont été modifiés.
À partir du nœud docs
Une autre mise à jour
Il semble au moins dans la version 1.4.3 que le pilote natif Mongo Node ne se comporte pas comme documenté. Il est possible de contourner en utilisant l'API de masse (introduite dans 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();
});