首页 > 解决方案 > $[](位置运算符)在猫鼬中不起作用

问题描述

$[] (positional-all)在 mongodb 3.6 版中添加了更新运算符。但它在猫鼬中不起作用。

我想更新allTasks特定用户的数组的所有元素,其paid : 0paid :1

我正在使用的查询是:

User.update({
        _id: userId,
        "allTasks.paid":0
    },{
        $set : {
            "allTasks.$[].paid":1
        }
    })

用户模式

var UserSchema = mongoose.Schema({
    allTasks: [{
        paid: Number // 0: unpaid, 1: paid
        //other fields
    }],
    //other fields
});

上面给出的查询不起作用,谁能告诉我,如果我遗漏了什么,或者做错了什么?

标签: mongodbmongoose

解决方案


对于面临同样问题的其他人:

问题是Mongodb&mongoose版本。

  • MongoDB 版本应该是 3.6+
  • Mongoose 版本需要 5.x 或更高

此外,您可能需要使用setFeatureCompatibilityVersion : 3.6.

这个答案:

当从较低版本切换到较高版本的 mongodb 时,您必须为您的 mongodb设置setFeatureCompatibilityVersion

启用或禁用保留与早期版本 MongoDB 不兼容的数据的功能。您只能针对 admin 数据库发出 setFeatureCompatibilityVersion。

您可以通过在 mongo shell 中运行此命令来简单地设置它

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

推荐阅读