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

MongoDB如何设置按天/月为单位的集合TTL过期时间

MongoDB TTL配置相关说明
  • MongoDB原生TTL索引的过期配置参数仅支持秒作为单位,不存在其他时间单位的原生配置语法,这也是你在官方文档中找不到其他单位配置说明的原因。

长周期TTL的配置方法

配置6个月、1年这类长周期TTL时,只需要提前把目标时间周期换算为对应秒数,传入参数即可,常见周期换算参考:

  • 1天:86400秒
  • 30天(约1个月):2592000秒
  • 180天(约6个月):15552000秒
  • 365天(约1年):31536000秒

代码示例

Mongoose Schema 配置1年(365天)TTL:

export const schema: Schema = new Schema({
  createdAt: {
    type: Date,
    required: true,
    default: Date.now,
    expires: 31536000 // 对应365天的秒数
  },
});

原生创建索引配置6个月(180天)TTL:

currentSchema.index({createdAt: 1},{expireAfterSeconds: 15552000});

精准过期场景方案

如果你需要按自然月、自然年做精准过期(比如要求文档在创建后满6个月的当天0点删除,不需要按固定天数估算),可以给文档单独新增一个expireAt字段,提前计算好准确的过期时间存在该字段中,创建TTL索引时将expireAfterSeconds设为0即可,此时MongoDB会直接以文档内expireAt记录的时间点作为过期判定标准,不需要手动换算长周期秒数。

注意:MongoDB的TTL后台清理线程默认每60秒执行一次,无论设置多长的过期周期,实际删除动作都会存在0-60秒的延迟,属于正常机制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 15:06:09