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

マングースの更新ループのない電子メールのような一意のIDによって異なる値を持つ多くの

    Array.mapを使用して、一括書き込みで使用する各入力を整形できます。

    あなたが説明している動作は、emailを使用しているようです 各ドキュメントを識別するためのフィールド。

    ドキュメント内の他のフィールドで何が起こるべきかを示していませんでした。他のフィールドをそのままにしておきたい場合は、$setを使用してください 受信データに記載されていないフィールドを削除するには、$replaceを使用します 。

    シェルでは、これは次のようになります:

    PRIMARY> db.users.find()
    { "_id" : 1, "email" : "[email protected]", "name" : "one" }
    { "_id" : 2, "email" : "[email protected]", "name" : "two" }
    { "_id" : 3, "email" : "[email protected]", "name" : "three" }
    
    PRIMARY> let users = [     
      { email: "[email protected]", name: "oneeee" },       
      { email: "[email protected]", name: "twoooo" },       
      { email: "[email protected]", name: "three" },       
      { email: "[email protected]", name: "four" }   
    ]
    
    PRIMARY> let bulkUpdate = db.users.initializeUnorderedBulkOp()
    
    PRIMARY> users.forEach(u => bulkUpdate.find({email:u.email}).upsert().update({$set:u}))
    
    PRIMARY> bulkUpdate.execute()
    BulkWriteResult({
        "writeErrors" : [ ],
        "writeConcernErrors" : [ ],
        "nInserted" : 0,
        "nUpserted" : 1,
        "nMatched" : 3,
        "nModified" : 2,
        "nRemoved" : 0,
        "upserted" : [
            {
                "index" : 3,
                "_id" : ObjectId("5f5e79ff28ee536df4c4a88e")
            }
        ]
    })
    
    PRIMARY> db.users.find()
    { "_id" : 1, "email" : "[email protected]", "name" : "oneeee" }
    { "_id" : 2, "email" : "[email protected]", "name" : "twoooo" }
    { "_id" : 3, "email" : "[email protected]", "name" : "three" }
    { "_id" : ObjectId("5f5e79ff28ee536df4c4a88e"), "email" : "[email protected]", "name" : "four" }
    

    Model.bulkWrite() をご覧ください。 マングースでこれを行う方法の例については。




    1. Casbah / Java MongoDBドライバーに対してjava.lang.IllegalArgumentExceptionが発生するのはなぜですか?

    2. $ mongoDBのプロジェクションfindOneAndUpdate()

    3. Mongodbは、条件に一致するすべてのオブジェクトのすべての配列要素をカウントします

    4. findOneAndUpdateメソッドから更新されたドキュメントを取り戻すにはどうすればよいですか?