无法使用零件(...)遍历元素

时间:2018-08-09 23:54:34

标签: arrays mongodb mongo-shell

运行mongod 3.6并尝试使用this example

以下是示例数据:

> 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 } ]})"
    }
})

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

1 个答案:

答案 0 :(得分:3)

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

  

启用或禁用与数据不兼容的持久性功能   MongoDB的早期版本。您只能发出   针对管理员数据库的setFeatureCompatibilityVersion。

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

db.adminCommand( { setFeatureCompatibilityVersion: "3.6" } )
相关问题