2016-12-22 12 views
1

私はmongooseに新しいので、もしこれが馬鹿に聞こえたら、私を許してください。マングースで同じ文書の複数の発見を避けるには?

編集ごとに、履歴値を保存して、自分のコレクションの既存の値も変更したいと思います。 は、だからここのコード

collection.findById(type_id).select({ "history": 0 }) 


.then(function(data){ 

    var changes = { data : data, by : user_id } 
    return collection.findOneAndUpdateAsync({_id:type_id}, 
      {$push: {"history": changes }}) 
    }) 


    .then(function(data){ 
return collection.findOneAndUpdateAsync({_id:type_id}, info) 
}) 


    .then(function(res){ 

    resolve(res) }) 

だコードのこの作品は、うまく動作しますが、私は同じコレクションのために、複数の検索を行うにはしたくありません。 あなたは何かより良いと効率的なものを提案することができれば素晴らしいでしょう。

ありがとうございます。 :)

答えて

1

アトミックアップデート内で可能なことはありません。あなたができる最善の方法は、サーバへのコール数を2に減らすことです。findByIdAndUpdate()newオプションをfalse(デフォルト)に設定して、最初のコールを更新すると、 の前にデータにアクセスできます。更新。 2番目の呼び出しを使用して、このデータで履歴を更新することができます。例:

collection.findByIdAndUpdateAsync(type_id, info /*, { "new": false } */) 
    .then(function(data){ 
     var changes = { 
      "data": data, 
      "by": user_id 
     }; 
     return collection.findByIdAndUpdateAsync(
      type_id, 
      { "$push": { "history": changes } }, 
      { "new": true } 
     ); 
    }) 
    .then(function(res){ resolve(res) }); 
関連する問題