You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改MongoDB Schema实现记录创建3600秒后自动删除

Mongoose实现记录创建3600秒后自动删除方案

实现逻辑

MongoDB原生提供TTL(生存时间)索引能力,可基于日期类型字段自动过期删除过期文档,无需业务层编写定时清理任务。你现有Schema已经定义了记录创建时间的createdAt字段,只需给该字段配置TTL索引即可满足需求,同时需要修复原代码中createdAt默认值的写法bug。

修改后的完整Schema代码

const verifyModel = mongoose.Schema(
    {
        userId:{
            type:Schema.Types.ObjectId,
            required:true,
            ref:"User",
            unique:true,
        },
        token:{
            type:String,
            required:true,
        },
        createdAt:{
            type:Date,
            // 修复原代码bug:去掉Date.now后的括号,传入函数引用,保证每次新建文档时才生成当前时间
            default: Date.now,
            // 配置TTL索引,文档创建满3600秒后自动过期,也可直接写expires: 3600,默认单位为秒
            index: { expires: '3600s' }
        },
    }
);

配置注意事项

  • TTL索引的清理任务是MongoDB后台周期性执行的,默认每60秒扫描一次待删除文档,因此实际删除时间可能比设定的3600秒有0-60秒的延迟,属于官方设计的正常表现。
  • 如果修改代码前该集合已经创建过非TTL版本的createdAt索引,需要先删除旧索引再重启服务,否则TTL索引会因为冲突无法生效。
  • TTL索引仅支持对BSON日期类型的字段生效,当前createdAt字段配置为Date类型,符合索引创建要求。
  • 如果后续需要调整过期时长,直接修改expires对应的时间值即可,修改后会同步更新索引配置。

内容的提问来源于stack exchange,提问作者Chirag Mittal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 05:15:31