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