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

MongoDBは、またはクエリを使用して複数のサブドキュメントを更新します

    このエラーが発生しました

    2番目のクエリが複数のサブドキュメントと一致したため 。現在、位置演算子を使用することはできません。 位置演算子を使用して配列内のすべてのアイテムを更新します。

    したがって、問題を解決するには、このプロセスに従うことができます

    1. _idを使用してドキュメントを検索し、 $elemMatch を使用してサブドキュメントを検索します そして

    2. 各サブドキュメントを更新し、ドキュメントを再度保存します

    このように試すことができます:

    db.deduplications.find(  
    { $or: [ {
             "_id": ObjectId("583fc558668bde730a460e11") , 
            "DeviceVersionPairs":{
                $elemMatch:{ "DeviceId": ObjectId("5822d0606bfdcd6ec407d9b9") , 
                "CloudFolderId": ObjectId("5823110e6bfdd46ec4357582") ,
                "DeviceVersionPairs.CloudFileId": ObjectId("582311168cd396223499942a") ,
                "DeviceVersionPairs.VersionId": ObjectId("582311168cd396223499942b") }}
        } ,   
        { 
            "_id": ObjectId("583fc558668bde730a460e11") , 
            "DeviceVersionPairs":{
                $elemMatch:{ "DeviceId": ObjectId("56dfe1356caaea14a819f1e4") , 
                "CloudFolderId": ObjectId("583fb4bc6e7f341874f13bfc") , 
                "CloudFileId": ObjectId("583fb539e015b8a53fb71872") , 
                "VersionId": ObjectId("583fb4ca6e7f331874213584") }}
        } ] 
    }).forEach(function (doc) {
        doc.DeviceVersionPairs.forEach(function (device) {
          device.status = 'passive';
        });
        db.deduplications.save(doc);
     });
    


    1. Mongodbプロトコルを使用してAzureDocumentDbにインデックスを作成できません

    2. 個別のサブドキュメントフィールドをカウントし、名前付きキーとして出力します

    3. Mongoidを使用した計算フィールドに基づくクエリ

    4. IntelliJでGradleの依存関係が機能しない