在MongoDB的精确元素数组中更新字段

我有一个这样的文档结构:

{ _id:"43434", heroes : [ { nickname : "test", items : ["", "", ""] }, { nickname : "test2", items : ["", "", ""] }, ] } 

我可以$setembedded对象的items数组的第二个元素在数组herosnickname "test"

结果:

 { _id:"43434", heroes : [ { nickname : "test", items : ["", "new_value", ""] }, // modified here { nickname : "test2", items : ["", "", ""] }, ] } 

您需要使用2个概念: mongodb的位置运算符,并简单地使用数字索引来input要更新的条目。

位置运算符允许你使用这样的条件:

 {"heros.nickname": "test"} 

然后引用find的数组条目,如下所示:

 {"heros.$ // <- the dollar represents the first matching array key index 

因为你想更新“items”中的第二个数组项,并且数组键是0索引的 – 那就是键1。

所以:

 > db.denis.insert({_id:"43434", heros : [{ nickname : "test", items : ["", "", ""] }, { nickname : "test2", items : ["", "", ""] }]}); > db.denis.update( {"heros.nickname": "test"}, {$set: { "heros.$.items.1": "new_value" }} ) > db.denis.find() { "_id" : "43434", "heros" : [ {"nickname" : "test", "items" : ["", "new_value", "" ]}, {"nickname" : "test2", "items" : ["", "", "" ]} ] }