在猫鼬中更新多个文档

时间:2020-06-28 10:08:41

标签: node.js mongodb mongoose mongodb-query updates

我的数据库mongodb中有以下数据

> db.poepledatas.find()
{ "_id" : ObjectId("5ef83e24b5b88209109affbd"), "name" : "eren", "age" : 30, "__v" : 0 }
{ "_id" : ObjectId("5ef85fef14e2da588c79683a"), "name" : "lixi", "age" : 30 }
{ "_id" : ObjectId("5ef866df14e2da588c79683b"), "name" : "deku", "age" : 29 }

我想将名称为eren和lixi的上述文档的“ age”字段更新为40 有没有办法在一个更新命令中做到这一点

我一直在尝试执行以下操作

personModel.updateMany({name:"eren",name:"lixi"},{age:40},function(err){
  if(err){
    console.log(err);
  }
  else{
    console.log("updated");
  }
});

但是上面的代码似乎只将名称为“ lixi”的一条记录的年龄更改为40岁

> db.poepledatas.find()
{ "_id" : ObjectId("5ef83e24b5b88209109affbd"), "name" : "eren", "age" : 30, "__v" : 0 }
{ "_id" : ObjectId("5ef85fef14e2da588c79683a"), "name" : "lixi", "age" : 40 }
{ "_id" : ObjectId("5ef866df14e2da588c79683b"), "name" : "deku", "age" : 29 }

是否可以在一个命令中将文档“名称” eren和lixi都更新为“ age” = 40?

2 个答案:

答案 0 :(得分:1)

是,请使用$in

此外,您的更新部分中还有一个较小的语法错误。您没有使用$set之类的更新运算符。因为它将以这种语法像replacement document一样起作用。

personModel.updateMany({name: {$in: ["lixi", "eren"]}}, {$set: {age: 40}}, function (err) {
    if (err) {
        console.log(err);
    } else {
        console.log("updated");
    }
});

答案 1 :(得分:0)

您必须具有或条件

 {"$or" : [{name:"eren"}, {name:"lixi"}]}

您的更新声明应为

{"$set" :{age:40}}