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自动重启模块

考虑到 Mongoose Node.js 中的引用,如何删除对象?

在 Mongoose (mongodb node.js) 中,如何更新现有值并插入缺失值,而不删除未指定的值?