2013-04-05 62 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}) 
相關問題