使用Node.js按照唯一的_id更新多个MongoDB对象

6

基本上,我试图根据它们的唯一对象ID(_id)更新我的Mongo数据库中的多个对象。 我尝试了以下方法,但它们都没有起作用:

  var new_arr = [];
  for (var i = 0; i < req.body.length; i++) {
    // req.body is an array received from the POST request.
    new_arr.push({"_id": new mongodb.ObjectID(req.body[i])})
  }
  console.log(new_arr);

  // new_arr is not accepted since an object is expected.
  job_applications.updateMany(
      new_arr
      ,
      {
        $set: {"application_status": "rejected"}
      }, function (err, results) {
        console.log(results);
        console.log(err);
        if (!err) {
          console.log('success with reject');
          res.sendStatus(200);
        }
      }
  );

我也尝试了以下方法,但没有成功。
var job_applications = req.app.locals.job_applications;
  var new_arr = [];
  for (var i = 0; i < req.body.length; i++) {
    // req.body is an array of unique IDs (_id)
    new_arr.push(new mongodb.ObjectID(req.body[i]))
  }
  var send_obj = {
    "_id": new_arr
  };
  job_applications.updateMany(
      send_obj
      ,
      {
        $set: {"application_status": "rejected"}
      }, function (err, results) {
        console.log(results);
        console.log(err);
        if (!err) {
          console.log('success with reject');
          res.sendStatus(200);
        }
      }
  );

我发现解决这个问题的唯一方法是为每个对象发送多个updateOne()请求到MongoDB,但这样非常低效。我相信必须有更有效的解决方案来解决这个问题。任何帮助/指导将不胜感激。

1个回答

7

您接近了正确答案,但需要使用$in查询操作符来将_id与可能值的数组进行匹配:

var new_arr = [];
for (var i = 0; i < req.body.length; i++) {
    new_arr.push(new mongodb.ObjectID(req.body[i]))
}
job_applications.updateMany({_id: {$in: new_arr}}, ...);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接