arrays - 不能使用部分 (...) 来遍历元素
问题描述
运行mongod
3.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 } ]})"
}
})
为什么会出现此错误消息?我没有正确遵循文档吗?
解决方案
从较低版本切换到较高版本的 mongodb 时,您必须setFeatureCompatibilityVersion
为您的 mongodb 设置哪个
启用或禁用保留与早期版本 MongoDB 不兼容的数据的功能。您只能针对 admin 数据库发出 setFeatureCompatibilityVersion。
您可以通过在 mongo shell 中运行此命令来简单地设置它
db.adminCommand( { setFeatureCompatibilityVersion: "3.6" } )
推荐阅读
- android - 某些手机中未显示 Toast 通知
- python - 多重继承:第二个基类构造函数要求泄漏到第一个基类构造函数
- jquery - Jquery滚动减少div的比例
- ruby-on-rails - Ruby on Rails 路由部署问题
- mysql - 如何在 sequelize 上创建存储过程
- java - 如何使用 Netty Reactor 关闭 TcpClient 连接?
- c# - 条码 ASP.NET C# 问题
- html - 在 PhpStorm 中选择标签。我想在 PhpStorm 中打开标签,关闭它并将选择器放在中间(就像在 Sublime 中一样)
- php - 是否可以在 MySQL 中的其他记录之间添加记录?
- redis - redis.call 失败