2016-10-09 8 views
0

かなり深くネストされたドキュメントを持っています。ネストの一部には、ObjectIDのハッシュと対応するオブジェクトが含まれています。ネストされたオブジェクトの1つの値を更新するだけで、コレクション内のすべてのドキュメントを更新する必要があります。フィールド名にワイルドカードを含むMongoDBドキュメントを更新する

db.mycollection.update({}, {$set : {"address.street" : "124 Baker St"}}, {multi: true}); 

しかし、私の場合、構造はISN」:

{ 
    "name" : "Bob", 
    "address" : { 
    "street" : "123 Baker St" 
    } 
} 

私は次のシェルコマンドを使用して、すべての「ストリート」の値を更新できます。だから私は、私のような構造を持っていた場合ことを知っていますとても単純で、そこにUUIDがあります。私はすべてを更新したいと思います。

{ 
    "name": "Bob", 
    "addresses" : { 
    "0934029572035702834234092834" : { 
     "street" : "123 Baker St" 
     }, 
    "0904958304959879873876862378" : { 
     "street" : "123 Baker St" 
     } 
    } 
} 

OK <ない素晴らしい例B/C、現実の世界であなたが同じになるようにこれらのアドレスを変更したくないだろうが、私はしばらくの間とします構造は、より多くのこのようなものです。 OIDでOIDを実行することなく、ネストされた「住所」オブジェクトのすべての「通り」の値をすべての文書で変更するにはどうすればよいですか?

+0

は本当にあなたの文書構造ということですか?可能であれば、それを変更することを強くお勧めします。 { 「名: "ボブ"、 "アドレス":[{ "タイプ": "あなたの奇妙なブツのようなGUID"、 "ストリート": "123ベーカーセント"}、 {私のような何かを期待しますタイプ: "あなたの2番目のguidのthingy" "ストリート": "123ベイカーセント"}]} このようにして、配列要素を更新することができます。currunt構造は、 "addresses.yourguidthingy.street" "新しいストリート"のような配列要素の更新ではなく、 "ストリート"のような配列要素の更新ではありません。 – HoefMeistert

+0

私が言ったように、それはちょっと工夫した例です(私は実際にアドレスを扱っていません)ネストされたドキュメントでは、親ネストされたドキュメントの各要素にGUIDキーとオブジェクト値が使用されます。もっと良い例は、私はスナップショットの履歴にすべてのスナップショットで更新されたプロパティが必要な状況に遭遇しました。 – Paul

答えて

0

私はあなたがUUIDのを知っていたとしますPはそれはのような配列が、更新コマンドに来て、ネストされた文書構造ではないです:

db.mycollection.update({}, {$set : {"addresses.0934029572035702834234092834.street" : "124 Baker St"}}, {multi: true}); 
関連する問題