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 太长时,这些删除也可能会延迟。在检索时检查过期是一个更可靠的选择。
我想在创建它 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 太长时,这些删除也可能会延迟。在检索时检查过期是一个更可靠的选择。