rmdir.cn

TTL 索引(自动过期)

创建自动过期数据的TTL索引

语法

db.collection.createIndex({ <dateField>: 1 }, { expireAfterSeconds: <seconds> })

说明

TTL (Time-To-Live) 索引是一种特殊单字段索引,用于在指定秒数后自动删除文档。非常适合会话存储、日志轮转、临时缓存等场景。expireAfterSeconds 指定文档创建后保留的秒数。后台线程每 60 秒运行一次清理。

参数

  • dateField必填

    日期字段名(必须为 Date/BSON 日期类型)

  • expireAfterSeconds必填

    文档保留的秒数,到期后自动删除

示例

会话过期

会话 30 分钟后自动删除

db.sessions.createIndex({ createdAt: 1 }, { expireAfterSeconds: 1800 })

日志清理

日志 7 天后自动删除

db.logs.createIndex({ timestamp: 1 }, { expireAfterSeconds: 604800 })

定时到期

设置文档的 expireAt 字段

db.temp.insertOne({ data: "...", expireAt: new Date(Date.now() + 3600000) }) db.temp.createIndex({ expireAt: 1 }, { expireAfterSeconds: 0 })