sql >> Database >  >> NoSQL >> MongoDB

Hoe te controleren of Mongo's $addToSet een duplicaat was of niet?

In de shell kun je tenminste onderscheiden of het document is gewijzigd of niet (zie 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 })

Update voor Node

Wanneer u collection.update(criteria, update[[, options], callback]); . gebruikt u kunt het aantal records ophalen dat is gewijzigd.

Vanaf het knooppunt docs

Nog een update

Het lijkt erop dat in versie 1.4.3 de native Mongo Node-driver zich niet gedraagt ​​zoals beschreven. Het is mogelijk om de bulk-API te gebruiken (geïntroduceerd 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();
});


  1. MongoDB of CouchDB - geschikt voor productie?

  2. collectie A die een buitenlander heeft met B, B heeft een buitenlander met collectie C, hoe kan ik een buitenlander van A naar collectie C brengen? (Totaal)

  3. Gebruik globaal een JsonConverter voor een klasse zonder het attribuut

  4. Maak een wildcard-tekstindex in MongoDB