我想使用mongoose模型在node.js上捕获mongodb collection expire事件。 例如,如果我有这个集合
$("#someid").fadeOut();
创建文档后,将在1小时后删除。我想在删除此文档时调用节点js函数。例如,我有这个功能
var mySchema = mongoose.Schema({
name: String,
time: {
type: Date,
default: Date.now,
expires: 60*60,
}
})
我希望在删除每个文档时为其调用此函数。
谢谢。
答案 0 :(得分:2)
正如我在评论中提到的,MongoDB没有内置的任何通知功能。您可以通过拖尾MongoDB oplog
来实现Meteor使用的相同方法,但这将需要很多的工作。
唯一相当简单合理的解决方案是使用node-schedule(npm install node-schedule --save
)之类的东西在应用程序级而不是数据库级执行此操作。
以下是一个例子:
var schedule = require('node-schedule');
var Model = mongoose.model('Model', mySchema);
Model.create({ name: 'Michael' }, function(err, doc) {
if (err) return console.error(err); // Handle the error
var now = new Date();
var when = new Date(now).setHours(now.getHours() + 1);
schedule.scheduleJob(when, function() {
// This callback will fire in one hour
});
});
这个问题是,即使MongoDB崩溃或类似,并且无法删除文档,回调也会触发。另一个问题是,如果您的应用程序崩溃,您的计划回调将丢失。