我目前有一个聊天机器人设置,可以将记录存储到MongoDB上。存储在 Mongo 中的对象看起来像...
{ ..., expiration_time: 12451525, ... }
其中expiration_time
是以分钟表示的数字。
我最初的方法是在 Web 应用程序上使用setInterval
来查询数据库,以删除与当前时间大于或等于过期时间的条件匹配的所有记录。但是,我觉得当已经有其他操作(例如读取和写入数据(时,Web应用程序会对数据库进行大量其他查询。
我读过有关将函数存储到 Mongo 上的信息,但我确定如何自动执行调用函数以自行删除记录的过程。
我肯定会喜欢任何反馈、方法或最佳实践指南。
提前感谢!
您可以使用 TTL 索引:
db.messages.createIndex( { "expiration_time": 1 }, { expireAfterSeconds: 0 } )
唯一的要求是expirtion_time
必须是日期而不是整数。
若要在特定时钟时间使文档过期,请首先在保存 BSON 日期类型值的字段上创建 TTL 索引
恕我直言,有 2 个选项:
- 可以使用 cronjob 删除过期的条目
- 可以使用上限集合。它就像一个环形缓冲区,因此最旧的条目将被覆盖。在这里,必须为有上限的集合选择正确的固定大小。即,如果聊天机器人每分钟写入集合,则大小 = 24 * 60 = 1440。