这个问题已经有了答案:
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/

10-10 07:16