MongoDB node.js : 10秒后自动删除文档

MongoDB node.js : Delete a document automatically after 10 seconds

我想在创建它 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 });

mongo docs 所述:

The background task that removes expired documents runs every 60 seconds. As a result, documents may remain in a collection during the period between the expiration of the document and the running of the background task.

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

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

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

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