MongoDB不能使用part遍历element

MongoDB cannot use the part to traverse element

我的数据库中有一个这样的项目架构:

Project: {
    _id: ObjectID(),
    // some data
    dashboard_group: [
        0: {
            _id: ObjectID(),
            dgr_nom: String,
            dgr_enable
        },
        // others dashboards
    ]
}

对于每个项目,它只能启用一个仪表板。因此,在 'dashboard_group' 数组中添加新的仪表板(已启用)之前,我必须将所有其他仪表板 (dgr_enable) 设置为 false。

为了不必检索已启用仪表板的索引,我使用标识符 $[] 将所有仪表板设置为 false。

这是我的要求:

db.Project.update({
    _id: my_pro_id
},
{
    $set: {
        "dashboard_group.$[].dgr_enable": false
    }
}, function(err) {

});

但是 Mongo return 我这个错误信息:

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

我已经尝试使用标识符 $,它没有 return 任何错误,但字段始终为真。

谁能理解为什么这个请求失败了?

对于相同情况下的每个人,dnickless 提供的解决方案对我有效:

In case you've upgrade from an older version try running this:

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

该行为通常是由 MongoDB 的更新安装引起的。 MongoDB 中内置了一个 "feature compatibility level" 开关,它允许更新到较新版本,但不会以 non-expected(好吧)的方式改变(部分)旧版本的行为.从 v3.4 升级到 v3.6 的 documentation 说明了该主题:

For deployments upgraded from 3.4 [the default feature compatibility level is] "3.4" until you setFeatureCompatibilityVersion to "3.6".

您可以通过 运行 以下命令解决此问题:

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