Mongoose / MongoDB TTL通知?

时间:2014-08-13 23:18:20

标签: node.js mongodb mongoose

查看了MongoDB和Mongoose文档,看不出这是否可行。我会事先告诉你我还没有写过任何代码试图做到这一点,因为我找不到任何东西可以用来代替它。

我正在寻找的是在MongoDB文档上设置TTL过期(如果重要的话,通过Mongoose插入),我希望应用程序在文档从集合中弹出时收到通知。有没有办法在MongoDB中使用本机,或者我必须自己做一些事情(例如民意调查)?

2 个答案:

答案 0 :(得分:2)

当通过TTL索引删除MongoDB文档时,您的应用程序没有服务器端挂钩通知。

但是,TTL索引只是服务器端TTL线程使用的基于日期的索引,该线程每分钟唤醒并删除符合到期条件的新文档。

如果你想添加某种on-delete钩子,我建议你写一个你自己的到期脚本,并通过cron或同等程序将其作为计划任务运行。此脚本可以首先运行查询以查找准备过期的匹配文档,然后在实际删除文档之前实现应用程序所需的任何通知。

答案 1 :(得分:1)

这里的a mongoose plugin可以帮到你。它实现了TTL功能,并在每次执行收割机时调用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功能。