【问题标题】:Meteor - How to automatically remove a single item from a collection after a specific time period from within a server side method?Meteor - 如何在特定时间段后从服务器端方法中自动从集合中删除单个项目?
【发布时间】:2017-06-30 16:48:18
【问题描述】:

我写了一个点击。调用方法的事件。此方法将单个项目 (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
          }
        } 
      );
    }
  }
});

但是,现在我需要在特定时间段 e 后从“activeInfos”中自动删除之前添加的单个项目 (InfoId)。 G。三个月。

有什么办法吗?

【问题讨论】:

    标签: mongodb meteor methods collections timer


    【解决方案1】:

    为此,您可以使用 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

    希望对你有帮助

    【讨论】:

    • 非常感谢这种方法。我现在正在阅读并尝试在 GitHub 上理解所有这些以实现 Cronjob。不过,您知道我如何在服务器端方法中实际运行它吗?我编写了一个带有 $pull 代码的 userManagement.update 函数,用于从用户中删除单个项目 (InfoId)。这行得通。但我不知道如何使用 SyncedCron.add ({...}) ?或者我可以在服务器上编写 SyncedCron.add({ with that $pull function}) 并从点击中启动 SyncedCron.start() 。活动?
    • 我们在服务器端使用 cron 作业。只需将您的 cron 代码放在服务器端的 Meteor.startup() 中,这是一种主要功能,或者您可以创建单独的文件并导入服务器上的主文件。当 SyncedCron 看到它的 start() 函数并按我们指定的时间执行作业函数时,它会自动运行。当我们想在指定时间后重复一个函数时,这很有帮助。你应该把 userManagement.update 查询放在工作函数中。
    • 如果我的回答对您有所帮助,请不要忘记通过单击我的答案上的右标记来标记我的答案正确:)
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-23
      • 2010-10-15
      • 2021-07-05
      • 2017-12-19
      • 1970-01-01
      • 2010-09-17
      相关资源
      最近更新 更多