mongodb替换子文档的某些值的所有实例

时间:2013-04-05 21:20:39

标签: mongodb

我的收藏(称为“工人”):

"_id" : "500"
"type" : "Manager",
"employees" : [{
"name" : "bob"
"id" : 101
},{
"name" : "phil"
"id" : 102
}]

目标:对于每个类型的_id:Manager AND包含“id”为102的子文档:将102替换为202.

期望的最终结果:

"_id" : "500"
"type" : "Manager",
"employees" : [{
"name" : "bob"
"id" : 101
},{
"name" : "phil"
"id" : 202
}]

我试过了:

db.workers.update({type:'Manager','employees.id':'102'},{$set:{'employees.id':'202'}},{multi:true})

然后我做了以下两件事来验证:

db.workers.find({type: "Manager", 'employees.id': 102}).count()

我得到9的结果。

我也试过这个来验证:

db.workers.find({$and: [{type: "Manager"},{"employees.id":60}]}).count()

这返回0。

此时我很困惑。我的更新错了吗?我发现错了吗?两者都是吗? “9”结果错了吗? '0'错了吗?

1 个答案:

答案 0 :(得分:4)

您需要使用$ positional update运算符更新与查询匹配的特定元素。您的更新还使用了'102''202'的值,这使得更新会在字段为数字时尝试匹配字符串。

您的更新应该是这样的:

db.workers.update(
    {type: 'Manager', 'employees.id': 102}, 
    {$set: {'employees.$.id': 202}}, 
    {multi: true})