TTL集合支持mongodb对存储的数据进行失效时间设置,经过指定的时间段后、或在指定的时间点过期,集合自动被mongod清除。这一特性有利于对一些只需要保存一定时间的数据信息进行存储,比如机器产生的事件数据、日志、会话信息等。

Mongodb使用TTL索引特性来实现TTL集合。TTL通过一个后台线程读取索引中数据类型的值,然后清除过期的集合。

集合中的文档超过expireAfterSeconds关键字定义的时间后,该文档就变得过期了,会被自动删除。在创建TTL索引的时候,需要使用到关键字expireAfterSeconds,索引中对应的field的值的类型必须是date,或者对应的array包含date类型的值。

只能对单列索引创建TTL索引,组合索引不能是TTL索引。

1.经过指定的时间间隔后,集合失效

> db.log_events.createIndex({"createdAt": 1},{expireAfterSeconds: 180}) #5分钟后过期
#插入文档
> db.log_events.insert({
"createdAt": new Date(),
"logEvent": 2,
"logMessage": "Success!"
})
#查看
> db.log_events.find()
{ "_id" : ObjectId("56e219ecf694a8d2cff60cca"), "createdAt" : ISODate("2016-03-11T01:05:48.082Z"), "logEvent" : 2, "logMessage" : "Success!" }
#5分钟后再次查看(已被清除)
> db.log_events.find()
>

2.指定时间点过期
将参数expireAfterSeconds设置为0,expireAt指定过期时间

> db.ttl.createIndex({"expireAt": 1},{expireAfterSeconds:0})
#插入文档
> db.ttl.insert({
"createdAt": new Date('Mar 11, 2016 09:30:00'),
"logEvent": 2,
"logMessage": "Success!"
})

使用TTL时是有限制的:
-如果要索引的字段已经在其他索引中使用,不能创建TTL索引
-索引不能包含多个字段
-如果定义的字段不存在,则永不过期
-不能对capped集合创建TTL索引

最新文章

  1. Android中的Service小结
  2. lua代码设置unity对象的基础属性
  3. The prefix "tx" for element "tx:annotation-driven " is not bound
  4. Codeforces Round #185 (Div. 2) C. The Closest Pair 构造
  5. Nagios的安装配置与应用之五监控远程Linux服务器
  6. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第三章:搜索、高级过滤和视图模型
  7. 基于Tire树和最大概率法的中文分词功能的Java实现
  8. less分页阅读
  9. pip命令
  10. 区块链会与io域名有什么关系
  11. DAX/PowerBI系列 - 库存总价值(Inventory Value)
  12. c++ 常成员函数 和 常对象
  13. 搭建一个简单的node.js服务器
  14. session和cokkie的区别与作用
  15. [UE4]创建Shooter基类,2种方法
  16. mySql---数据库索引原理及优化
  17. 压力测试 JMeter3.3
  18. LR和SVM的相同和不同
  19. 记一次nginx -t非常慢的排障经历
  20. 必应词典手机版(IOS版)与有道词典(IOS版)之问卷分析

热门文章

  1. 1.1(SQL学习笔记)SQL基础
  2. 从源码入手,一文带你读懂Spring AOP面向切面编程
  3. js 根据开始日期和结束日期显示倒计时
  4. atomic与nonatomic的区别
  5. 用 Jenkins + .netcore 2.0 构建
  6. 分公司下拉框赋值-从后台传到前端jsp
  7. iOS: 环信的推送
  8. iOS:网页视图控件UIWebView的详解
  9. 爬虫之多线程 多进程 自定义异步IO框架
  10. OpenGL ES入门09-GLSL实现常见特效 [转]