首页 > 解决方案 > 不能使用部分 (...) 来遍历元素

问题描述

运行mongod3.6 并尝试使用此示例

这是示例数据:

> db.students2.find().pretty()
{
    "_id" : 1,
    "grades" : [
        {
            "grade" : 80,
            "mean" : 75,
            "std" : 8
        },
        {
            "grade" : 85,
            "mean" : 90,
            "std" : 6
        },
        {
            "grade" : 85,
            "mean" : 85,
            "std" : 8
        }
    ]
}
{
    "_id" : 2,
    "grades" : [
        {
            "grade" : 90,
            "mean" : 75,
            "std" : 8
        },
        {
            "grade" : 87,
            "mean" : 90,
            "std" : 5
        },
        {
            "grade" : 85,
            "mean" : 85,
            "std" : 6
        }
    ]
}

我正在尝试使用示例中指定的所有位置运算符:

> db.students2.update({}, { $inc: { "grades.$[].std" : -2 } }, {multi: true})
WriteResult({
    "nMatched" : 0,
    "nUpserted" : 0,
    "nModified" : 0,
    "writeError" : {
        "code" : 16837,
        "errmsg" : "cannot use the part (grades of grades.$[].std) to traverse the element ({grades: [ { grade: 80.0, mean: 75.0, std: 8.0 }, { grade: 85.0, mean: 90.0, std: 6.0 }, { grade: 85.0, mean: 85.0, std: 8.0 } ]})"
    }
})

为什么会出现此错误消息?我没有正确遵循文档吗?

标签: arraysmongodbmongo-shell

解决方案


从较低版本切换到较高版本的 mongodb 时,您必须setFeatureCompatibilityVersion为您的 mongodb 设置哪个

启用或禁用保留与早期版本 MongoDB 不兼容的数据的功能。您只能针对 admin 数据库发出 setFeatureCompatibilityVersion。

您可以通过在 mongo shell 中运行此命令来简单地设置它

db.adminCommand( { setFeatureCompatibilityVersion: "3.6" } )

推荐阅读