MongoDB node.js:10秒后自动删除文档
Posted
技术标签:
【中文标题】MongoDB node.js:10秒后自动删除文档【英文标题】:MongoDB node.js : Delete a document automatically after 10 seconds 【发布时间】: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 );
【问题讨论】:
【参考方案1】:expireAfterSeconds
不保证立即删除文档。删除由每分钟运行的后台作业完成。该作业是低优先级的,可以在当前负载高时被 MongoDB 推迟。因此,当过期时间精确到秒对您的用例很重要时,您应该将过期时间添加到查找查询中,以确保您没有得到任何应该被删除的文档。
此功能在此处记录:http://docs.mongodb.org/manual/tutorial/expire-data/
我不建议创建自己的作业来自动删除文档并以更短的时间间隔运行,因为这可能不仅会导致大量负载,而且实际上也可能无法解决问题,因为当 oplog 太长时,这些删除也可能会延迟。检查检索过期是一个更可靠的选择。
【讨论】:
【参考方案2】:正如mongo docs 所说:
删除过期文档的后台任务每 60 次运行一次 秒。因此,文档可能会在收集期间保留在集合中 文件到期和运行之间的时间 后台任务。
因此,如果需要在 10 秒后准确删除文档,您将不得不编写自己的服务、作业或其他可编程方法来在特定时间后删除文档。
【讨论】:
以上是关于MongoDB node.js:10秒后自动删除文档的主要内容,如果未能解决你的问题,请参考以下文章
CRUD RESTful API(Node.js,Express,Mongodb)中的删除错误
Node.js /Express 和 mongoose:通过自动拉取新数据建立“可观察”的 mongodb 连接?
基于Vue + Node.js + MongoDB的图片上传组件,实现图片的预览和删除
node.js零基础详细教程(7.5):mongo可视化工具webstorm插件nodejs自动重启模块