在MongoDB的精确元素数组中更新字段
我有一个这样的文档结构:
{ _id:"43434", heroes : [ { nickname : "test", items : ["", "", ""] }, { nickname : "test2", items : ["", "", ""] }, ] }
我可以$set
embedded对象的items
数组的第二个元素在数组heros
与nickname
"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" : ["", "", "" ]} ] }