更新多级嵌入式文档

时间:2016-11-21 14:26:27

标签: arrays mongodb mongodb-query mongodb-update

我在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,       " date":ISODate(" 2016-11-21T11:00:00.000 + 0000"),       " basket.assetId":2500,       " basket.exGroup.exgId":0

从根本上说,我的问题是我不知道如何正确处理多级数组(即doc.array.doc.array.doc)文档中的文档。

1 个答案:

答案 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并推送一个新文档。但是你需要相应地为你的文档建模。

相关问题