如何在MongoDB上的对象中查找和更新嵌套数组元素

时间:2019-10-25 09:41:04

标签: java mongodb mongodb-update

我下面有一个收藏夹。我正在尝试更新数组元素。

我试图更新lineItem _id的值是否为1,然后转到规格列表,如果specName为“ Model”,则将特征值从900更新为50,如您所见,_id也是一个数组。

收集数据:

SecurityContext

相关更新无法按我预期的方式运行。

    {
    "_id": "100",
    "name": "Campaign",
    "status": "Active",
    "parts": {
        "lineItem": [
            {
                "_id": [
                    {
                        "name": "A",
                        "value": "1"
                    }
                ],
                "spec": [
                    {
                        "specName": "Brand",
                        "characteristicsValue": [
                            {
                                "value": "500"
                            }
                        ]
                    },
                    {
                        "specName": "Model",
                        "characteristicsValue": [
                            {
                                "value": "900"
                            }
                        ]
                    }
                ]
            },
            {
                "_id": [
                    {
                        "name": "B",
                        "value": "2"
                    }
                ],
                "spec": [
                    {
                        "specName": "Brand",
                        "characteristicsValue": [
                            {
                                "value": "300"
                            }
                        ]
                    },
                    {
                        "specName": "Model",
                        "characteristicsValue": [
                            {
                                "value": "150"
                            }
                        ]
                    }
                ]
            },
            {
                "_id": [
                    {
                        "name": "C",
                        "value": "2"
                    }
                ]
            }
        ]
    }
}

编辑: 每个_id都有一个spec数组。因此,我们需要找到_id,然后转到_id数组下的spec,找到品牌并更新值。

1 个答案:

答案 0 :(得分:1)

尝试这种方式:

db.Collection.update(
   {},
{ $set: { "parts.lineItem.$[outer].spec.$[inner].characteristicsValue" : "50" } },
{ multi: true, arrayFilters: [{"outer._id.value" : "1"}, {"inner.specName" : "Model"}]}
);