我在我的数据库中有一个像这样的项目架构:
Project: {
_id: ObjectID(),
// some data
dashboard_group: [
0: {
_id: ObjectID(),
dgr_nom: String,
dgr_enable
},
// others dashboards
]
}
对于每个项目,它只能启用一个仪表板。因此,在我在“仪表板组”中添加新的信息中心(已启用)之前数组,我必须将所有其他仪表板(dgr_enable)设置为false。
为了不必检索启用的仪表板的索引,我使用标识符$ []将所有仪表板设置为false。
这是我的要求:
db.Project.update({
_id: my_pro_id
},
{
$set: {
"dashboard_group.$[].dgr_enable": false
}
}, function(err) {
});
但是Mongo会给我这个错误信息:
"cannot use the part (dashboard_group of dashboard_group.$[].dgr_enable) to traverse the element ({dashboard_group: [ { _id: ObjectId('such id'), dgr_nom: "much noun", dgr_enable: true } ]})"
我已经尝试使用标识符$,它没有返回任何错误,但字段总是正确的。
有人能理解为什么这个请求会失败吗?
答案 0 :(得分:1)
这种行为通常是由MongoDB的更新安装引起的。 MongoDB内置了一个“功能兼容级别”开关,允许更新新版本,不会以非预期的方式改变(部分)旧版本的行为。用于从v3.4升级到v3.6的documentation表示该主题:
对于从3.4升级的部署[默认功能兼容级别为]“3.4”,直到您将theFeatureCompatibilityVersion设置为“3.6”。
您可以通过运行以下命令来解决此问题:
db.adminCommand( { setFeatureCompatibilityVersion: "3.6" } )
答案 1 :(得分:-1)
对于同一个案例中的每个人来说,解决方案无法为我提供帮助:
如果您从旧版本升级,请尝试运行:
db.adminCommand( { setFeatureCompatibilityVersion: "3.6" } )