如何检查我的mongodb过期帖子并使用nodejs将其状态更改为过期

时间:2017-11-18 14:58:30

标签: node.js mongodb

我想创建一个通过我的mongodb运行的服务来检查过期帖子并自动将其状态更新为“已过期”这是我做的

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 个答案:

答案 0 :(得分:1)

不是每次都进行查找,而结果集可能非常大,您只需发出更新而不先查找所有帖子,循环遍历它们,只更新符合条件的帖子。这将减少数据库调用,并加快执行速度。

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