3

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

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

目标:对于每个类型的 _id:Manager 并且包含“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”错了吗?

4

1 回答 1

4

您需要使用$位置更新运算符来更新与您的查询匹配的特定元素。您的更新还使用 的值,当这些字段是数字时'102''202'这会使更新尝试匹配字符串。

您的更新应如下所示:

db.workers.update(
    {type: 'Manager', 'employees.id': 102}, 
    {$set: {'employees.$.id': 202}}, 
    {multi: true})
于 2013-04-06T01:22:15.117 回答