我想创建一个通过我的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秒运行一次请问这是正确的方法吗?如果不是,我该如何解决?
答案 0 :(得分:1)
不是每次都进行查找,而结果集可能非常大,您只需发出更新而不先查找所有帖子,循环遍历它们,只更新符合条件的帖子。这将减少数据库调用,并加快执行速度。
setInterval(function() {
Post.update({
expiredOn: {
$gte: new Date()
}
}, {
$set: {
status: "expired"
}
}, {
multi: true
}, function(err) {
if (err) {
return;
}
});
}, 5000);