2014-01-16 31 views
1

我有一系列遵循這種結構的MongoDB文件:一個元素添加屬性,蒙戈陣列(基於該陣列項目的另一個屬性)

{ 
"_id": "myId", 
"myArray": [ 
    {"foo": "bar"}, 
    {"foo": "baz"} 
    ] 
} 

另一種可能是這樣的:

{ 
"_id": "myOtherId", 
"myArray": [ 
    {"foo": "bar"}, 
    {"foo": "baz"} 
    ] 
} 

我需要添加一個屬性到任何數組元素,其中foo = bar只有當id = myOtherId ...換句話說,所以我的第二個文檔看起來像這樣(但第一個文檔不會更新):

{ 
"_id": "myOtherId", 
"myArray": [ 
    {"foo": "bar","foot":"bart"}, 
    {"foo": "baz"} 
    ] 
} 

我知道我更新的第一個參數是這樣的:

db.coll.update({$and:[{"_id":"myOtherId"},{"myArray.foo":"bar"}]}, // but what comes in the $set? 

我怎麼然後撰寫了$set參數,因此,只有在我需要它{"$foot":"bart"}加入?有沒有辦法捕獲數組項目的索引值,或更好的方式來處理它?

回答

1

在這種情況下,您不需要使用$and,因爲查詢對象中的多個術語之間始終存在隱式AND。您也可以使用$位置更新運營商在$set身份匹配myArray元素從查詢更新:

db.coll.update(
    {_id: "myOtherId", "myArray.foo": "bar"}, 
    {$set: {"myArray.$.$foot": "bart"}}) 
+0

完美...位置操作。謝謝你的回答,併爲我教授新的東西。 – jlmcdonald

相關問題