2016-11-21 75 views
0

我在mongoDB中有一個相當複雜的數據結構。該文件看起來有點像這樣更新多級嵌入式文檔

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

我想補充的文檔的數組嵌入文檔的exGroup陣列,使每個嵌入的文件看起來像這樣

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

我有試圖用一個更新查詢,看起來像這樣做:

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:00.000 + 0000」), 「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

這非常有幫助,因爲它可以幫助我插入文檔。如果我稍後需要,我仍然無法理解如何更新其中一個值(比如價格)。你能幫忙嗎? –

+0

當然。我會在一段時間後發佈。在現在的東西中間。所以基本上你想匹配和更新籃子裏面的procie ... exgroup。對 ? –

+0

是的。如果你可以編輯你的評論,並表明我也覺得我會很開心。謝謝 –