更新数组中的对象字段

时间:2018-04-14 17:32:13

标签: mongodb

在mondodb中,我想更新数组中对象的字段。示例数据库如下所示:

{
    "_id" : ObjectId("5ad237559d30d918c89c7f46"),
    "myArray" : [
        {
            "name" : "a",
            "name2" : "a",
            "value" : 900000 //<--- instead of this...
        },
        {
            "name" : "b",
            "name2" : "b",
            "value" : 0
        }
    ]
},
{
    "_id" : ObjectId("5ad238049d30d918c89c7f47"),
    "myArray" : [
        {
            "name" : "b",
            "name2" : "b",
            "value" : 0
        },
        {
            "name" : "c",
            "name2" : "a",
            "value" : 0 //... I want to update this
        }
    ]
}

我想通过查询value AND name:c来更新上一个name2:a字段。我尝试使用以下指令,但它设置了第一个对象的值(名称:名称2:a)。问题出在$ char附近吗?

db.test.updateOne({$and:[{"myArray.name" : "c"}, {"myArray.name2" : "a"}]},
                 {$set:{"myArray.$.value" : 900000}})

2 个答案:

答案 0 :(得分:1)

您可以使用arrayFilters

db.test.updateOne({}, {$set:{"myArray.$[element].value" : 900000}}   { 
 multi: true,
 arrayFilters: [ {$and:[{"element.name" : "c"}, {"element.name2" : "a"}]}        ]
}, 
)

抱歉,我没有mongodb在那里测试它,查询可能需要调整一下

答案 1 :(得分:1)

您需要执行$elemMatch以匹配数组中的特定项目,然后您可以使用位置运算符:

db.test.updateOne(
    { "myArray": { $elemMatch: { "name": "c", "name2"; "a" } } },
    { $set: { "myArray.$.value": 900000 } }
);