【问题标题】:MongoDB node.js : Delete a document automatically after 10 secondsMongoDB node.js:10秒后自动删除文档
【发布时间】:2022-01-22 01:18:12
【问题描述】:

我想在创建它 10 秒后自动删除一个文档,为此我使用 mongodb TTL,但是计时器无法正常工作,并在 40 秒或 50 秒或 20 秒后删除该文档,那么我的在哪里错了?

  await db.collection("admin_msg").insertOne({ createdAt: new Date() });
  await db.collection("admin_msg").createIndex({ createdAt: 1}, { expireAfterSeconds: 10 });

【问题讨论】:

    标签: javascript mongodb ttl


    【解决方案1】:

    expireAfterSeconds 不保证立即删除文档。删除由每分钟运行的后台作业完成。该作业是低优先级的,可以在当前负载高时被 MongoDB 推迟。因此,当过期时间精确到秒对您的用例很重要时,您应该将过期时间添加到查找查询中,以确保您没有得到任何应该被删除的文档。

    此功能在此处记录:http://docs.mongodb.org/manual/tutorial/expire-data/

    建议创建自己的作业来自动删除文档并以更短的时间间隔运行,因为这可能不仅会导致大量负载,而且实际上也可能无法解决问题,因为当 oplog 太长时,这些删除也可能会延迟。检查检索过期是一个更可靠的选择。

    【讨论】:

      【解决方案2】:

      正如mongo docs 所说:

      删除过期文档的后台任务每 60 次运行一次 秒。因此,文档可能会在收集期间保留在集合中 文件到期和运行之间的时间 后台任务。

      因此,如果需要在 10 秒后准确删除文档,您将不得不编写自己的服务、作业或其他可编程方法来在特定时间后删除文档。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-23
        • 2019-04-24
        • 1970-01-01
        • 1970-01-01
        • 2017-08-22
        • 2021-03-05
        • 1970-01-01
        • 2021-07-14
        相关资源
        最近更新 更多