2016-10-18 10 views
3

こんにちは、私は複雑な構造を持つコレクションを持っており、この構造のドキュメントは構造が異なります。このコレクションのすべてのキーVを値0に更新したいとします。 例:mongoDbドキュメントのすべてのキーを更新する方法

{ 
    "_id" : ObjectId("5805dfa519f972b200ea2955"), 
    "s" : { 
     "id" : NumberLong(36435) 
    }, 
    "a" : [ 
     { 
      "XX-(random value)" : { 
       "V" : 4 
      }, 
      "V" : 4, 
      "u" : { 
       "YY-(random value)" : { 
        "V" : 4, 
        "ZZ-(random value)" : { 
         "V" : 4, 
         "WW-(random value)" : { 
          "V" : 4 
         } 
        } 
       } 
      } 
     } 
    ] 
} 
+1

まあ、私はあなたを示唆まず、JavaScriptコード以下はニードフルを行う必要がありますあなたの文書構造を変更し、 'xx- *'をサブ文書のキー値にしてください。あなたの質問に答えると言われています。これは現在の構造でこれを行い、文書のスナップショットを撮る唯一の方法です。カーソルを反復し、一括操作を使用して各文書を更新します。 – styvane

+0

あなたは私にコードを送ってください – user1796624

答えて

0

これは短いjavascriptで行うことができます。各文書の各プロパティを繰り返し、プロパティの名前をチェックする必要があります。名前が "V"と一致する場合は、値0で更新します。これは、ループを使用して再帰的に実行できます。あなたは、あなたのモンゴデータベースに対してそれを実行することができます.jsファイルにこのコードを保存する場合は

function checkProperties(doc) { 
    for (var propertyName in doc) { 
     if (typeof doc[propertyName] == "object") { 
      checkProperties(doc[propertyName]); 
     } else { 
      if (propertyName == "V") { 
       doc[propertyName] = 0; 
       print(doc[propertyName]); 
      } 
     } 
    } 
} 

db.<your_collection_name>.find({}).forEach(function(doc) { 
    checkProperties(doc); 
    db.<your_collection_name>.save(doc); 
}); 

> mongo --host <host> --port <port> <script_name>.js 
関連する問題