MongoDB在节点js上过期事件

时间:2015-11-05 08:22:03

标签: node.js mongodb events mongoose

我想使用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,
    }
})

我希望在删除每个文档时为其调用此函数。

谢谢。

1 个答案:

答案 0 :(得分:2)

正如我在评论中提到的,MongoDB没有内置的任何通知功能。您可以通过拖尾MongoDB oplog来实现Meteor使用的相同方法,但这将需要很多的工作。

唯一相当简单合理的解决方案是使用node-schedulenpm 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崩溃或类似,并且无法删除文档,回调也会触发。另一个问题是,如果您的应用程序崩溃,您的计划回调将丢失。