2017-06-07 8 views
0

APIの操作MongoDBオブジェクトの完全なドキュメント更新を行いたいと思います。_idでマッチした文書を置き換える方法は?

これは動作する現在のコードですが、毎回_idを削除しなければならないのは間違いです。これを行うより良い方法はありますか?

 PutDoco : function(doco){ 
      return new Promise(function(Resolve,Reject){ 
       delete doco._id; 
       db.collection('docos').updateOne(
        {"details.ID":doco.details.ID}, 
        doco, 
        function(err,result){ 
         if(err) 
          return Reject(err); 

         Resolve(result); 
        } 
       ); 
      }); 
     }, 
+0

'doco._id'は更新しているドキュメントの' _id'と常に一致しますか?もしそうでなければ、 '_id'値は不変であるため、そうでなければ意味をなさないので、それを取り除くのが正しいと感じるはずです。 :) – JohnnyHK

+0

常にそれにマッチします。 (私はMongoからの文書を入手し、Mongoに文書を戻すだけです) –

答えて

2

(不変である_id以外の)文書のすべての内容を交換するときは、代わりにreplaceOneを使用することができます。それは明確であるかもしれない、しかし

return db.collection('docos').replaceOne({"details.ID":doco.details.ID}, doco); 

(かつ迅速)_idを使用して交換する文書を見つけるために:あなたはそれをコールバックを渡さない場合replaceOneは約束を返すので、あなたがにダウンあなたの全機能を減らすことができます代わりに:

return db.collection('docos').replaceOne({_id: doco._id}, doco);