node.js - 让到期日期触发 MongoDB 中的函数?
问题描述
我正在尝试建立一个用户/会员管理系统。用户将具有其会员资格的到期日期。我的数据库架构定义如下:
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 工作”要好。任何建议表示赞赏!
解决方案
当且仅当使用 MongoDB Atlas 而不是自行部署的 MongoDB 数据库时,您可以查看stich triggers。
假设您没有使用 MongoDB Atlas(并且由于某种原因您不能或不愿意使用它):
MongoDB 确实有TTL 索引(生存时间),但与您的用例不同,它不会触发某些功能,而是会删除/删除文档。此外,它还可以像 cron 作业一样工作。删除过期文档的后台任务每 60 秒运行一次。您可以将此索引用于您的用例的一种方法是使用像Debezium这样的 Change-Data-Capture 平台。
但是上述解决方案的部署和维护要复杂得多。我仍然建议您使用 Cron 作业,它更简单且技术上与 MongoDB 相同,它将在后台执行相同的操作。只是我要补充一点,您不需要遍历所有记录。只获取那些过期日期小于 now() 的记录。在将来插入记录集到期日期时。例如。如果您需要在 1 天后使一条记录过期,则过期日期应为 now() + 1 天。并且不要忘记在到期日添加索引。
推荐阅读
- fonts - Ubuntu上的VSCode不读取已安装的字体
- sql - 主体 Oracle SQL 中未定义对象类型规范
- python - 将 userInput 分配给字典的更多 Pythonic 方式?
- r - 为管道中的多个操作枚举 R 中的变量时 DRY
- python - 如何更改 x 轴上的刻度?
- .htaccess - RewriteRule 错误地附加 index.php
- python - 如何将列表字符串转换为列表?
- excel - 在 Excel 中计算一组角度的均值和标准差
- r - 我们如何使用列名、缺失值的数量及其百分比来创建数据框
- python - 在 Python 中以前缀表示法递归创建给定字符串表达式的二叉树