MongoDB不能使用该部分来遍历元素

时间:2018-02-23 13:36:58

标签: javascript node.js mongodb node-mongodb-native

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

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

我已经尝试使用标识符$,它没有返回任何错误,但字段总是正确的。

有人能理解为什么这个请求会失败吗?

2 个答案:

答案 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" } )