在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}})
答案 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 } }
);