我的mongo系列中有以下数据:
{
"services" : [
{
"service" : "service1",
"instanceId" : 0,
"attributes" : {
"attr" : {
"value" : "val1"
}
}
},
{
"service" : "service1",
"instanceId" : 1,
"attributes" : {
"attr" : {
"value" : "val2"
}
}
},
]
}
我正在尝试使用$ operator:
运行以下查询以更新instanceid 1的数据db.device.update({"services.service":"service1", "services.instanceId":1},{"$set":{"services.$.attributes.attr.value":"val3"}},{})
但是这个查询总是更新数组的实例id 0。我无法找到任何其他方式来更新它。
答案 0 :(得分:2)
使用$elemMatch
来定位在多个条件下匹配的数组元素。
像
这样的东西db.device.update(
{"services":{"$elemMatch":{"service":"service1", "instanceId":1}}},
{"$set":{"services.$.attributes.attr.value":"val3"}}
)
答案 1 :(得分:0)
<强>更新强>:
试试这个:
db.runCommand({
update:"sample", //provide collection name here
updates:[{q:{}, u:{$set:
{"services.$[element].attributes.attr.value":"val3"}}, arrayFilters: [ {
"element.instanceId": 1, "element.service": "service1" } ], multi:true}]
})
或者这个:
db.sample.update(
{},
{$set:{"services.$[element].attributes.attr.value":"val3"}},
{arrayFilters: [ { "element.instanceId": 1, "element.service": "service1" }
], multi:true}
)
感谢@mickl的评论和信息。