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

时间:2017-02-12 18:31:50

标签: mongodb meteor methods collections timer

我写了一下。调用方法的事件。此方法将单个项目(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)。在特定时间段之后e。 G。三个月。

有没有办法做到这一点?感谢任何帮助。

感谢。

2 个答案:

答案 0 :(得分:2)

这样做可以使用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中:我们将添加我们想要在计划中添加的时间后运行的代码。

在此之后开始你的cron。为此添加此

SyncedCron.start();

有关详情,请查看此链接https://github.com/percolatestudio/meteor-synced-cron

计划时间读取此http://bunkat.github.io/later/parsers.html#overview

我希望这会有所帮助

答案 1 :(得分:0)

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

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