我想知道如何更新数组“array_of_stuff”中“name”字段标识的元素之一的“value”字段。例如,我想将“name_of_thing_1”的值更新为“new_value_of_thing_1”。如何使用第二个参数(即更新参数) ONLY 更新命令。我正在重新使用内部编写的类库我无法控制更新命令的第一个参数(即查询参数)。这可能吗?
{
"array_of_stuff": [
{
"name": "name_of_thing_1",
"value": "value_of_thing_1",
},
{
"name": "name_of_thing_2",
"value": "value_of_thing_2",
}
]
}
感谢您的帮助!
答案 0 :(得分:10)
您可以更新数组中单个项目的值(如果您知道其索引),如下所示:
db.stuff.update(/* query ... */, {$set:{"arrayname.<index>":new_value}})
如果您的数组包含文档,则可以在该索引处更新文档的特定字段,如下所示:
db.stuff.update(/* query ... */, {$set:{"array_of_stuff.0.value":"new_value_of_thing_1"}})
// If you could use the query parameter and knew something
// about the value in the array you wanted to change:
db.stuff.update({"array_of_stuff.value":"value_of_thing_1"}, {$set:{"array_of_stuff.$.value":"new_value_of_thing_1"}})
答案 1 :(得分:1)
看看此示例是否可以帮助您:
db.bruno.insert({"array": [{"name": "Hello", "value": "World"}, {"name": "Joker", "value": "Batman"}]})
db.bruno.update({"array.name": "Hello"}, {$set: {"array.$.value": "Change"}})
db.bruno.find().pretty()
输出:
db.bruno.find().pretty()
{
"_id" : ObjectId("52389faaafd72821e7b25a73"),
"array" : [
{
"name" : "Hello",
"value" : "Change"
},
{
"name" : "Joker",
"value" : "Batman"
}
]
}
答案 2 :(得分:1)
我认为不可能。为了更新数组中某个元素的字段,您应该使用位置$运算符,例如:
update({'array_of_stuff.name':'name_of_thing_1'},
{ $set: {'array_of_stuff.$.value':'new_value_of_thing_1'}})
但是according to documentation:位置$运算符充当与查询文档匹配的第一个元素的占位符,而数组字段必须作为查询文档的一部分出现。