Mongodb $[](位置运算符)不在猫鼬中工作

Mongodb $[](位置运算符)不在猫鼬中工作,mongodb,mongoose,Mongodb,Mongoose,mongodb版本3.6中添加了更新运算符。但它在猫鼬身上不起作用 我想将某个特定用户的allTasks数组的所有元素更新为paid:0到paid:1 我使用的查询是: User.update({ _id: userId, "allTasks.paid":0 },{ $set : { "allTasks.$[].paid":1 } }) UserSchema var UserSchema =

mongodb版本3.6中添加了更新运算符。但它在猫鼬身上不起作用

我想将某个特定用户的
allTasks
数组的所有元素更新为
paid:0
paid:1

我使用的查询是:

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

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

上述查询不起作用,有人能告诉我,我是否遗漏了什么或做错了什么吗?

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

问题是
Mongodb
mongoose
版本

  • MongoDB版本应为3.6+
  • Mongoose版本需要为5.x或更高版本
此外,您可能需要使用
setFeatureCompatibilityVersion:3.6

来自答案:

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

启用或禁用保留与不兼容数据的功能 MongoDB的早期版本。您只能发布 针对管理数据库设置FeatureCompatibilityVersion

您只需在MongoShell中运行此命令即可进行设置

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

你的猫鼬版本是什么?它的
4.13.14
。我认为这可能是问题所在,将mongoose版本更新到5.x,并将
setFeatureCompatibilityVersion
更新到3.6。。。。这正是我现在要做的。我的mongodb版本已经是3.6+。我还需要设置功能兼容性版本吗?