这个问题已经有了答案:
How to Update Multiple Array Elements in mongodb
13个答案
我有这样的东西
{
"_id" : ObjectId("5742be02289512cf98bf63e3"),
"name" : "test1",
"name" : "test1",
"attributes" : [
{
"name" : "x",
"color" : "0xd79c9c",
"_id" : ObjectId("5742be02289512cf98bf63e8")
},
{
"name" : "y",
"color" : "0xd79c9c",
"_id" : ObjectId("5742be02289512cf98bf63e7")
},
{
"name" : "z",
"color" : "0xd79c9c",
"_id" : ObjectId("5742be02289512cf98bf63e6")
}
],
"__v" : 6
}
我想更新所有文档,并为每个属性设置新字段。
所以我想运行单个查询,一次更新所有文档。我想,这个问题会解决的
db.spaces.update({}, { $set: { "attributes.0.weight": 2 } }, {multi: true})
但是当我运行这个查询时,我会得到一个错误。
“代码”:16837,
“errmsg”:“位置运算符未找到
查询需要匹配。未展开的更新:属性。$.weight“
所以我不明白为什么。
请帮忙
最佳答案
您需要将数组字段作为查询文档的一部分,以便使用positional operator
。
例如,如果要更新第一个数组元素,即使用{ "attributes.name": "x" }
更新,则可以按照以下模式操作:
db.spaces.update(
{ "attributes.name": "x" }, // <-- the array field must appear as part of the query document.
{ "$set": { "attributes.$.weight": 2 } },
{ "multi": true }
)
对于较新的MongoDB版本,可以使用
3.2.X
方法根据上面的筛选器更新集合中的多个文档。关于arrays - mongodb位置运算符错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37612448/