Meteor语言 - 如何在服务器端方法中在特定时间段后自动从集合中删除单个项目



我写了一个调用方法的点击事件。此方法将单个项 (InfoId( 推送到名为 userManagement 的集合中。因此,这些项目将分配给该用户。

事件处理程序:

Template.available.events({
"click .push": function(e) {
    e.preventDefault();
    var InfoId = this.InfoId;
    Meteor.call('pushInfo', InfoId);
}, });

和方法:

Meteor.methods({
  'pushInfo': function(InfoId) {
    if (this.userId) {
      userManagement.update({
          '_id': this.userId
        }, {
          $push: {
            'activeInfos': InfoId
          }
        } 
      );
    }
  }
});

但是,现在我需要在特定时间段(例如三个月(后自动从"activeInfos"中删除以前添加的单个项目 (InfoId(。

有什么办法可以做到这一点吗?

为此,您可以使用 cronjob只需使用meteor add percolate:synced-cron安装它

在 cron 中,你需要做两件事,一是向 cron 添加一个任务,二是启动我们的 cron。

SyncedCron.add({
  name: 'your cron name',
  schedule: function(parser) {
    // parser is a later.parse object
    return parser.text('every 2 hours');
  },
  job: function() {
    console.log("hello");
  }
});

这里 schedule: 用于设置时间,在 Job: 我们将添加要在 schedule 中添加的时间后运行的代码。

在此之后启动您的 cron。 为此添加此

SyncedCron.start();

有关更多信息,请查看此链接 https://github.com/percolatestudio/meteor-synced-cron 。

有关计划时间,请阅读此 http://bunkat.github.io/later/parsers.html#overview

我希望这会有所帮助

解决此类问题的一种方法是使用 mongo TTL 索引让 mongo 自动删除文档。TTL 索引仅适用于文档(不适用于子文档(,因此,如果要沿着该路线前进,则需要将activeInfos分离到单独的集合中,并在查找期间使用聚合管道的$lookup阶段重新创建原始文档。

db.active_infos.createIndex( { "createdAt": 1 }, { expireAfterSeconds: appropriateNumberOfSeconds } )

最新更新