2016-01-14 9 views
5

基本的には、一意のobjectID(_id)に基づいてMongoデータベースの複数のオブジェクトを更新しようとしています。私は以下のことを試してみましたが、彼らは動作しませんでした:Node.jsを使って複数のMongoDBオブジェクトを一意の_idで更新する

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); 
     } 
     } 
); 

私はこの問題に見つけた唯一の解決策は、MongoDBの各オブジェクトに対して複数のupdateOne()要求を送信することでしたが、それは非常に非効率的です。私は、この問題に対するより効率的な解決策が必要であると考えています。 ヘルプ/ガイダンスは大変ありがとうございます。

答えて

5

あなたは二番目と密接しているが、あなたは、可能な値の配列に対して_idに一致するように$inクエリ演算子を使用する必要があります。

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}}, ...); 
+0

ありがとう!あなた、私の人生を救った – Aryan

関連する問題