在从mongoDB中删除记录时添加自动化流程的最佳方法是什么?

时间:2017-08-16 06:44:50

标签: javascript node.js mongodb

我目前有一个聊天机器人设置来将记录存储到MongoDB上。存储在Mongo中的对象看起来像......

{ ..., expiration_time: 12451525, ... }

其中expiration_time是以分钟表示的数字。

我的初始方法是在Web应用程序上使用setInterval来查询数据库,以删除与当前时间大于或等于到期时间的条件匹配的所有记录。但是,当我已经有其他操作(例如读取和写入数据)时,我觉得从Web应用程序到数据库会有很多其他查询。

我读到了将函数存储到Mongo上,但我确定如何自动调用函数来自行删除记录。

我绝对会喜欢任何有关最佳做法的反馈,方法或指南。

提前致谢!

2 个答案:

答案 0 :(得分:1)

恕我直言有两种选择:

  1. 可以使用cronjob删除过时的条目
  2. 可以使用Capped Collections。它就像一个环形缓冲区,因此最旧的条目将被覆盖。这里必须选择上限集合的正确固定大小。即,如果聊天机器人每分钟写入集合,则size = 24 * 60 = 1440。

答案 1 :(得分:1)

您可以使用TTL index

db.messages.createIndex( { "expiration_time": 1 }, { expireAfterSeconds: 0 } )

唯一的要求是expirtion_time必须是日期而不是整数。

  

要在特定时钟时间到期文档,首先在保存BSON日期类型值的字段上创建TTL索引