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
相关产品推荐
相关产品推荐

