我正在尝试构建用户/会员管理系统。用户将具有其成员的有效期。我的数据库架构定义如下:
const membership = new mongoose.Schema({
UserId:{ type: String, index: {unique: true} },
name:String,
joinDate:Date,
expiryDate:Date,
})
我不确定该怎么做:当当前日期超过到期日期时,将运行一个函数userExpired(),该函数将通知用户,要求其续订并阻止其访问某些资源。但是如何触发此功能?
我能想到的一种方法是:
在linux中使用“ cron作业”,它将以一定的间隔不断运行代码。每次运行代码时,它都会对所有endDate和userid执行查询,然后一个一个地进行比较(使用.map()或.forEach())。找到有效日期后,对该用户运行功能userExpired()。
我不确定是否还有另一种方法。例如,如果MongoDB可以持续监控到期日期,并将其与当前日期进行比较,然后调用该函数,我觉得它比Linux中的此类其他“ cron作业”要好。任何建议表示赞赏!
答案 0 :(得分:1)
当且仅当使用的是MongoDB Atlas而不是自部署的MongoDB数据库时,您才能查看stich triggers。
假设您没有使用MongoDB Atlas(并且由于某些原因您不愿意使用它):
MongoDB确实具有TTL indexes(生存时间),但是与您的用例不同,它不会触发某些功能,而是会删除/删除文档,而不是触发某些功能。而且,它也像cron工作一样工作。删除过期文档的后台任务每60秒运行一次。您可以在用例中使用此索引的一种方法是使用Debezium之类的Change-Data-Capture平台。
但是上述解决方案的部署和维护要复杂得多。我仍然建议您使用Cron作业,它与MongoDB在后台做相同的事情更加简单,技术上也一样。我要补充一下,您不需要遍历所有记录。仅获取那些具有小于now()的到期日期的记录。将来插入记录集的到期日期时。例如。如果您需要在1天后使一条记录过期,则过期日期应为now()+ 1天。而且不要忘记在到期日添加索引。