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

Posted

技术标签:

【中文标题】Meteor - 如何在特定时间段后从服务器端方法中自动从集合中删除单个项目?【英文标题】:Meteor - How to automatically remove a single item from a collection after a specific time period from within a server side method? 【发布时间】: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。三个月。

有什么办法吗?

【问题讨论】:

【参考方案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 )

【讨论】:

以上是关于Meteor - 如何在特定时间段后从服务器端方法中自动从集合中删除单个项目?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Meteor 中的服务器调用客户端方法?

您如何在 Meteor 中存储特定于客户端的数据服务器端?

Meteor:在服务器端调试

如何使用 Meteor 处理文件上传?

Meteor - 如何在 MongoDB 集合中查找/获取对象并使用方法将其推送到另一个集合中?

Meteor 服务器端远程调试