在本页面
本文档介绍了MongoDB的“ 生存时间 ”或TTL收集功能。TTL收集使将数据存储在MongoDB中成为可能,并且可以在mongod
指定的秒数后或特定的时钟时间自动删除数据。
数据到期对于某些类型的信息很有用,包括机器生成的事件数据,日志和会话信息,这些信息只需保留有限的时间即可。
特殊的TTL索引属性支持TTL集合的实现。TTL功能依赖于一个后台线程,mongod
该线程读取索引中日期类型的值并从集合中删除过期的文档。
若要创建TTL索引,请在其值为日期或包含日期值的数组
的字段上使用db.collection.createIndex()
带有expireAfterSeconds
选项
的
方法
。
注意
TTL索引是单个字段索引。复合索引不支持TTL属性。有关TTL索引的更多信息,请参阅 TTL索引。
您可以expireAfterSeconds
使用以下collMod
命令修改现有TTL索引的。
到后由于索引字段的指定的秒数已过到期数据,创建于保持BSON日期类型的值或BSON日期类型对象的阵列的字段TTL指数和在指定一个正的非零值expireAfterSeconds
字段。expireAfterSeconds
自从其索引字段中指定的时间起,如果该字段中的秒数过去,则文档将过期。
[1]
例如,以下操作在log_events
集合的createdAt
字段上创建索引,
并指定的
expireAfterSeconds
值3600
以将到期时间设置为所指定的时间之后的一小时createdAt
。
将文档添加到log_events
集合中时,请将
createdAt
字段设置为当前时间:
log_events
当文档的createdAt
值
[1]大于中指定的秒数时,MongoDB将自动从集合中删除文档expireAfterSeconds
。
[1] | (1,2)如果该字段包含BSON日期类型的对象的数组,如果BSON日期类型的对象中的至少一个大于在指定的秒数较旧的数据过期
expireAfterSeconds 。 |
要使文档在特定的时钟时间到期,请首先在一个字段上创建TTL索引,该字段包含BSON日期类型的值或BSON日期类型的对象的数组,并将expireAfterSeconds
值指定为0
。对于集合中的每个文档,将索引日期字段设置为与文档到期时间相对应的值。如果索引日期字段包含过去的日期,则MongoDB认为文档已过期。
例如,以下操作在log_events
集合的expireAt
字段上创建索引
并指定的
expireAfterSeconds
值0
:
对于每个文档,将的值设置expireAt
为对应于文档应过期的时间。例如,以下
insert()
操作将添加一个文档,该文档应在到期。July 22, 2013 14:00:00
MongoDB中将从自动删除文档的log_events
集合时,文件expireAt
值比在指定的秒数旧的expireAfterSeconds
,即0
秒年长在这种情况下。这样,数据将以指定的expireAt
值过期
。