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

是的。如果你可以编辑你的评论,并表明我也觉得我会很开心。谢谢 –