sql >> データベース >  >> NoSQL >> MongoDB

Mongoの$addToSetが重複していたかどうかを確認する方法

    少なくともシェルでは、ドキュメントが変更されたかどうかを区別できます(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 })
    

    ノードの更新

    collection.update(criteria, update[[, options], callback]);を使用する場合 変更されたレコードの数を取得できます。

    ノードから docs

    別の更新

    少なくともバージョン1.4.3では、ネイティブのMongoNodeドライバーが文書化されているように動作していないようです。バルクAPI(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. MongoEngineのListFieldのEmbeddedDocumentをアトミック更新するにはどうすればよいですか?

    2. mongocsharpdriver 2.7.0を使用して(認証を使用して)MongoDbに接続できません

    3. MongoDBUpdateFirstメソッドの使用法

    4. 春のウェブフラックスと春のデータリアクティブにページネーションを実装する方法はありますか