运行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 } ]})"
}
})
为什么会出现此错误消息?我没有正确遵循文档吗?
答案 0 :(得分:3)
当从mongodb的较低版本切换到较高版本时,必须为mongodb设置setFeatureCompatibilityVersion
,
启用或禁用与数据不兼容的持久性功能 MongoDB的早期版本。您只能发出 针对管理员数据库的setFeatureCompatibilityVersion。
您可以简单地通过在mongo shell中运行此命令来进行设置
db.adminCommand( { setFeatureCompatibilityVersion: "3.6" } )