MongoDB过期索引

MongoDB过期索引

MongoDB 中的过期索引,指的是一段时间后会过期的索引,在索引过期后,相应的数据会被删除,这适合存储一些在一段时间之后会失效的数据,比如用户的登录信息,想要用户登录信息2天后失效,需要用户重新登录,或者存储的日志,希望这些日志在一段时间后删除。

MongoDB过期索引使用说明

存储在过期索引字段的值必须是指定的时间类型,比如是 ISODate 或者 ISODate 数组,不能使用时间戳,否者不能被自动删除。比如

db.test2.insert({time:1})

这种是不能被删除的,如果指定了 ISODate() 数组,则按照最小的时间进行删除。

过期索引不能是复合索引,因为我们不能指定两个过期时间索引。过期索引删除时间不是精确的,因为删除过程是由后台程序每 60s 跑一次,而且删除也需要一些时间,索引存在误差。

MongoDB过期索引详解

语法

db_name.table_name.ensureIndex({field:1},{expireAfterSeconds:seconds})

参数

名称 描述
db_name 数据库名
table_name 集合名
field 字段名
seconds 过期索引的时长

说明

通过指定 expireAfterSeconds,说明当 seconds 秒后自动删除记录。

案例

我们首先,使用 mongo 命令,连接上数据库,具体命令如下:

mongo

如下图所示:

28_MongoDB过期索引.png

现在,我们使用 use 命令,切换到 haicoder 数据库,具体命令如下:

use haicoder

现在,我们使用 insert 插入四条记录,具体命令如下:

db.haicoder.insert([ {id:1, "url" : "haicoder.net/c", "score" : 100 }, {id:2, "url" : "haicoder.net/cpp", "score" : 90 }, {id:3, "url" : "haicoder.net/golang", "score" : 80 }, {id:4, "url" : "haicoder.net/java", "score" : 60 } ]);

执行完毕后,此时,如下图所示:

29_MongoDB过期索引.png

我们看到,此时提示我们成功插入了多条记录,现在,我们创建一个过期索引,具体命令如下:

db.haicoder.ensureIndex({time:1},{expireAfterSeconds:60})

执行完毕后,此时,如下图所示:

30_MongoDB过期索引.png

现在,我们立刻,再次插入一条数据,具体命令如下:

db.haicoder.insert({time:new Date()})

执行完毕后,我们再次查看所有数据,具体命令如下:

db.haicoder.find({}, {_id:0});

此时,如下图所示:

31_MongoDB过期索引.png

现在,我们等待 60s 之后,再次查看所有数据,此时如下图所示:

32_MongoDB过期索引.png

我们看到,我们插入的数据,在 60s 之后,自动被删除了。

MongoDB过期索引总结

MongoDB 中的过期索引,指的是一段时间后会过期的索引,在索引过期后,相应的数据会被删除,这适合存储一些在一段时间之后会失效的数据,比如用户的登录信息,想要用户登录信息2天后失效,需要用户重新登录,或者存储的日志,希望这些日志在一段时间后删除。