2016-11-21 13 views
0

私はかなり複雑なデータ構造をmongoDBに持っています。文書は、私が埋め込まれた文書のそれぞれが、私が持っているこのマルチレベルの埋め込みドキュメントを更新

   { 
        "id" : 0, 
        "price" : 0.9918 
        "order" : { 
          "id":0, 
          "exec": 
           [{ 
           "quantity" : 1, 
           "price" : 1.0 
           }, 
           { 
           "quantity" : 1, 
           "price" : 1.01 
           } 
           ] 
       } 

のように見えるように埋め込まれた文書のexGroup配列に文書の配列を追加したいと思い、この

{ 
    "id" : 0, 
    "basket" : [ 
     { 
      "price" : 0.9918, 
      "id" : 2500, 
      "exGroup" : [ 
       { 
        "exgId" : 0, 
        "ePrice" : 0.9918 
       } 
       { 
        "exgId" : 1, 
        "ePrice" : 0.9918 
       } 
      ] 
     }, ]} 

のような少しのように見えますこのようになります更新クエリでこれを実行しようとしました:

db.fund.update(
    { 
     "id": 0, 
     "basket.id": 2500, 
     "basket.exGroup.exgId": 0, 
     "basket.exGroup.order": {"$exists" : false} 
    }, 
    { 
     "$set": 
     { 
      "basket.exGroup.$.order" : 
      { 
       "id":0, 
       "exec": 
        [{ 
        "quantity":1, 
        "price":0.9978 
        }] 
      } 
     } 
    } 
) 

残念ながら、これは私にエラーを与える「fundId」:0、 「日付」:ISODate ( "2016-11-21T11:00:+ 0000 00.000")、 "basket.assetId":2500、 "basket.exGroup.exgId":0

基本的に私の問題は、私は方法がわからないということですマルチレベルアレイのリーフにある文書を正しくアドレス指定する(すなわち、 doc.array.doc.array.doc)

+0

exgroup権限に何かを押し込むだけですか? –

+0

はい。もし誰かが私にそれを正しく行う方法を教えたら、私は残りをすることができると思う。 –

答えて

0
db.rich.update(
    { 
     "id": 0, 
     "basket.id": 2500, 
     "basket.exGroup.exgId": 0, 
     "basket.exGroup.order": {"$exists" : false} 
    }, 
    { 
     "$push": 
     { 
      "basket.$.exGroup" : 
      { 
       "id":0, 
       "exec": 
        [{ 
        "quantity":1, 
        "price":0.9978 
        }] 
      } 
     } 
    } 
) 

これは基本的にexGroupを更新して新しい文書をプッシュします。それに応じて文書をモデル化する必要があります。

+0

それは私が文書の挿入を助けるので非常に役に立ちます。私は、後で必要があれば、値の1つ(価格)をどのように更新するのか、まだ理解できません。あなたはそれを助けることができますか? –

+0

私はあまりにもそれを投稿します。今の何かの真ん中にしたがって、基本的には、バスケット内のprocieを一致させて更新する必要があります。exgroup。右 ? –

+0

はい。あなたがあなたのコメントを編集して、それもまた私が行くのが良いと思うことを示すことができたら。ありがとう –

関連する問題