2017-11-18 5 views
0

私のmongodbを経由して期限切れのポストをチェックし、ステータスが「期限切れ」に自動的に更新されるようにするサービスを作成したい場合はここをクリックしてください期限切れのポストのmongodbをチェックして、状態をnodejsを使用して期限切れに変更する方法

setInterval(function(){ 
    Post.find({}, function(err, posts) { 
    if (err) { 
    return 
    }else{ 
    for (var i = posts.length - 1; i >= 0; i--) { 
     var current = moment(); 
     if(moment(current).isSameOrAfter(posts[i].expiredOn)){ 
      Post.update({ _id: posts[i]._id},{status:"expired"}, function(err){ 
       if (err) { 
       return; 
      } 
      }) 
     } 
     } 
    } 
    }); 
}, 5000); 

この機能は、nodejsサーバーで5秒ごとに実行されます。これは正しい方法ですか?いいえ、どうすれば修正できますか?

答えて

1

結果セットが非常に大きい可能性があるたびに検索を実行するのではなく、すべての投稿を最初に見つけたり、ループしたり、条件に一致するものだけを更新したりすることなく更新を発行できます。これにより、データベース呼び出しが少なくなり、実行が速くなります。

setInterval(function() { 
    Post.update({ 
     expiredOn: { 
      $gte: new Date() 
     } 
    }, { 
     $set: { 
      status: "expired" 
     } 
    }, { 
     multi: true 
    }, function(err) { 
     if (err) { 
      return; 
     } 
    }); 
}, 5000); 
関連する問題