【发布时间】:2020-05-15 20:11:47
【问题描述】:
查看了 MongoDB 和 Mongoose 文档,无法确定这是否可能。我会提前告诉你,我还没有编写任何代码来尝试这样做,因为我找不到任何可以与之挂钩的东西。
我正在寻找的是在对 MongoDB 文档设置 TTL 到期后(通过 Mongoose 插入以防万一),我希望应用程序在文档从集合中弹出时收到通知。有没有办法在 MongoDB 中做到这一点,还是我必须自己做一些事情(例如轮询)?
【问题讨论】:
查看了 MongoDB 和 Mongoose 文档,无法确定这是否可能。我会提前告诉你,我还没有编写任何代码来尝试这样做,因为我找不到任何可以与之挂钩的东西。
我正在寻找的是在对 MongoDB 文档设置 TTL 到期后(通过 Mongoose 插入以防万一),我希望应用程序在文档从集合中弹出时收到通知。有没有办法在 MongoDB 中做到这一点,还是我必须自己做一些事情(例如轮询)?
【问题讨论】:
当通过 TTL 索引删除 MongoDB 文档时,您的应用程序没有服务器端挂钩来获得通知。
但是,TTL 索引只是服务器端 TTL 线程使用的基于日期的索引,它每分钟唤醒一次并删除符合到期条件的新文档。
如果您想添加某种 on-delete 钩子,我建议您编写自己的到期脚本并通过cron 或等效的方式将其作为计划任务运行。该脚本可以首先运行查询以查找准备过期的匹配文档,然后在实际删除文档之前实现您的应用程序需要的任何通知。
【讨论】:
这里是a mongoose plugin,可以为您提供帮助。它实现了 TTL 功能,并在每次执行 reaper 时调用onReap 函数。
var ttl = require('mongoose-ttl');
var schema = new Schema({..});
schema.plugin(ttl, {
ttl: 'the time each doc should live in the db (default 60 seconds)',
interval: 'how often the expired doc reaper runs (default 5 mins)',
onReap: 'callback passed to reaper execution'
});
应该提到这个插件没有使用原生 MongoDB TTL 功能。
【讨论】: