使用Node.js通过其独特的_id更新多个MongoDB对象

基本上我试图根据他们唯一的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); } } ); 

我发现这个问题唯一的解决scheme是发送多个updateOne()请求每个对象到MongoDB,但效率非常低。 我相信这个问题必须有一个更有效的解决scheme。 任何帮助/指导非常感谢。

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