【问题标题】:What's the best approach to adding an automated process on deleting records from mongoDB?添加从 mongoDB 中删除记录的自动化过程的最佳方法是什么?
【发布时间】:2018-01-24 04:38:15
【问题描述】:

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

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

expiration_time 是一个以分钟为单位的数字。

我最初的方法是在 web 应用程序上使用setInterval 来查询数据库以删除所有符合当前时间大于或等于过期时间的条件的记录。但是,当已经有其他操作(例如读取和写入数据)时,我觉得 Web 应用程序会对数据库进行很多额外的查询。

我阅读了有关将函数存储到 Mongo 的信息,但我确定如何自动化调用函数以自删除记录的过程。

我肯定会喜欢任何关于最佳实践的反馈、方法或指南。

提前致谢!

【问题讨论】:

  • 在 MongoDB 中有一个用于此目的的内置机制,称为 TTL index

标签: javascript node.js mongodb


【解决方案1】:

恕我直言,有 2 个选项:

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

【讨论】:

    【解决方案2】:

    您可以使用TTL index

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

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

    要在特定时钟时间使文档过期,首先在包含 BSON 日期类型值的字段上创建一个 TTL 索引

    【讨论】:

    • 有一个问题,似乎这只有在我添加新记录时才有效。它似乎不会自行过期。
    • @user3593810 您是否将expiration_time 转换为旧文档的最新版本?也看看stackoverflow.com/questions/18727743/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-17
    • 1970-01-01
    • 1970-01-01
    • 2016-02-09
    • 2013-03-20
    相关资源
    最近更新 更多