【问题标题】:Updating multiple MongoDB objects by their unique _id using Node.js使用 Node.js 通过其唯一 _id 更新多个 MongoDB 对象
【发布时间】:2016-04-19 05:03:34
【问题描述】:

基本上,我正在尝试根据其唯一的 objectID (_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,但这非常低效。我相信必须有一个更有效的解决方案来解决这个问题。 非常感谢任何帮助/指导。

【问题讨论】:

    标签: node.js mongodb mongodb-query


    【解决方案1】:

    您已接近第二个,但您需要使用$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}}, ...);
    

    【讨论】:

    • 谢谢!先生,您救了我的命:)
    猜你喜欢
    • 2017-05-19
    • 1970-01-01
    • 2017-05-23
    • 1970-01-01
    • 1970-01-01
    • 2011-06-21
    • 1970-01-01
    • 2019-02-20
    相关资源
    最近更新 更多