TTL索引是特殊的单字段索引,MongoDB可使用TTL索引在一定时间后或在特定时钟时间自动从集合中删除文档。数据到期对于某些类型的信息很有用,例如机器生成的事件数据,日志和会话信息,它们仅需要在数据库中保留有限的时间。
要创建TTL索引,请将该db.collection.createIndex()
方法与expireAfterSeconds
选项一起使用,该方法的值是日期或包含日期值的数组。
例如,要lastModifiedDate
在eventlog
集合的字段上创建TTL索引,请在mongo
外壳程序中使用以下操作
:
自从索引字段值起经过指定的秒数后,TTL索引使文档过期;即,到期阈值是索引字段值加上指定的秒数。
如果字段是数组,并且索引中有多个日期值,则MongoDB使用数组中最低(即最早)的日期值来计算到期阈值。
如果文档中的索引字段不是日期 或包含日期值的数组,则该文档不会过期。
如果文档不包含索引字段,则该文档不会过期。
中的后台线程mongod
读取索引中的值,并从集合中删除过期的文档。
当TTL线程处于活动状态时,您将db.currentOp()
在数据库概要分析器的输出或数据中
看到删除操作。
TTL索引以与非TTL索引相同的方式支持查询。
expireAfterSeconds
选项。_id
字段不支持TTL索引。createIndex()
更改expireAfterSeconds
现有索引的值。而是将
collMod
database命令与index
collection标志一起使用
。否则,要更改现有索引的选项的值,必须首先删除索引并重新创建。expireAfterSeconds
选项重新创建
。