面试题答案
一键面试MongoDB TTL索引
TTL(Time to Live)索引是MongoDB中的一种特殊索引类型,用于自动删除集合中已过期的文档。它主要针对包含日期时间字段的文档,MongoDB会定期检查这些文档的日期时间字段值,若该值距当前时间超过设定的TTL时间,文档将被自动删除。
工作原理
- 后台线程:MongoDB有一个后台线程定期(默认每60秒)检查具有TTL索引的集合。
- 比较时间:该线程会将文档中TTL索引所对应的日期时间字段值与当前系统时间进行比较。
- 删除过期文档:如果日期时间字段值表明文档已过期(例如,文档创建时间距今超过了指定的TTL时长),MongoDB会自动删除该文档。
创建TTL索引代码
在MongoDB中,可以使用createIndex
方法为users
集合的createdAt
字段创建TTL索引,示例代码如下:
db.users.createIndex( { "createdAt": 1 }, { expireAfterSeconds: <秒数> } );
其中<秒数>
为从文档的createdAt
字段值开始,经过多少秒后该文档被视为过期并删除。例如,如果希望在用户创建1天(86400秒)后自动删除用户数据,代码为:
db.users.createIndex( { "createdAt": 1 }, { expireAfterSeconds: 86400 } );