MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment vérifier si $addToSet de Mongo était un doublon ou non

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