Node.js 让到期日触发MongoDB中的函数?

Node.js 让到期日触发MongoDB中的函数?,node.js,database,mongodb,mongoose,Node.js,Database,Mongodb,Mongoose,我正在尝试建立一个用户/会员管理系统。用户将有其成员资格的到期日。我的数据库架构定义如下: const membership = new mongoose.Schema({ UserId:{ type: String, index: {unique: true} }, name:String, joinDate:Date, expiryDate:Date, }) 我不知道该怎么做:当当前日期超过到期日期时,将运行一个函数userExpired(),该函数将通知

我正在尝试建立一个用户/会员管理系统。用户将有其成员资格的到期日。我的数据库架构定义如下:

const membership = new mongoose.Schema({
    UserId:{ type: String, index: {unique: true} },
    name:String,
    joinDate:Date,
    expiryDate:Date,

})
我不知道该怎么做:当当前日期超过到期日期时,将运行一个函数userExpired(),该函数将通知用户,要求他续订,并阻止他访问某些资源。但是如何触发这个功能呢

我能想到的一个方法是:

在linux中使用“cron作业”,它将以一定的间隔不断运行代码。每次代码运行时,它都会对所有endDate和userid执行查询,然后逐个比较(use.map()或.forEach())。找到到期日期后,对该用户运行函数userExpired()


我不确定是否有其他方法可以做到这一点。例如,如果MongoDB可以持续监控到期日期,并将其与当前日期进行比较,然后调用该函数,我觉得它比Linux中的这种额外“cron作业”要好。任何建议都将不胜感激

如果且仅当您使用的是MongoDB Atlas而不是自行部署的MongoDB数据库,那么您可以查看

假设您没有使用MongoDB Atlas(并且由于某些原因您不能或不愿意使用它):

MongoDB确实有(生存时间),但与您的用例不同,它不会触发某些功能,而是删除/删除文档。此外,它还可以像cron作业一样工作。删除过期文档的后台任务每60秒运行一次。您可以将此索引用于您的用例的一种方法是,使用变更数据捕获平台,如


但上述解决方案的部署和维护要复杂得多。我仍然建议您使用Cron-jobs,它更简单,技术上与MongoDB在后台做同样的事情相同。我要补充的是,您不需要遍历所有记录。只需获取过期日期小于now()的记录即可。在将来插入记录集到期日期时。如果您需要在1天后使一条记录过期,则过期日期应为now()+1天。并且不要忘记在到期日添加索引。

如果并且仅当您使用MongoDB Atlas而不是自行部署的MongoDB数据库时,您可以查看

假设您没有使用MongoDB Atlas(并且由于某些原因您不能或不愿意使用它):

MongoDB确实有(生存时间),但与您的用例不同,它不会触发某些功能,而是删除/删除文档。此外,它还可以像cron作业一样工作。删除过期文档的后台任务每60秒运行一次。您可以将此索引用于您的用例的一种方法是,使用变更数据捕获平台,如

但上述解决方案的部署和维护要复杂得多。我仍然建议您使用Cron-jobs,它更简单,技术上与MongoDB在后台做同样的事情相同。我要补充的是,您不需要遍历所有记录。只需获取过期日期小于now()的记录即可。在将来插入记录集到期日期时。如果您需要在1天后使一条记录过期,则过期日期应为now()+1天。别忘了在到期日添加索引