2013-04-05 65 views
3

我的收藏(称为“工人”):MongoDB的更换某些值的所有实例的子文档

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

目标为:每_id这是一个类型:经理和包含有“ID”子文档的102:

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

我曾尝试::

与202

期望的最终结果102代替

我那么做了以下两件事情来验证:

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

我得到的9

我也试过这个验证结果:

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

这返回0。

我很困惑在这一点上。我的更新是错误的吗?我发现错了吗?这是两个吗? '9'结果是错误的吗? '0'错了吗?

回答

4

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

你的更新应该是这样的,而不是:

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