mongodb数据条目过期设置

mongodb数据条目过期设置

2018年08月01日 19:20:05 秦汉唐天下 阅读数:446

Mongodb自带时间过期删除的机制,其机制主要是使用Time To Live(TTL) 索引实现的

注意:以下集中情况是无法使用TTL索引的
(1)TTL索引是单字段索引,混合索引不支持TTL,并且也会忽略expireAfterSeconds属性
(2)在_id 主键上不能建立TTL索引
(3)在capped collection中不能建立TTL索引,因为MongoDB不能从capped collection中删除文档
(4)你不能使用createIndex()去更改已经存在的TTL索引的expireAfterSeconds值,如果想更改expireAfterSeconds,可以使用collMod命令,否则你只能删除索引,然后重建了
(5)你不能在已有索引的字段上再创建TTL索引了,如果你想把非TTL索引改为TTL索引,那就只能删除重建索引了

索引创建

假设过期检时间字段名为:createdAt,具体语句如下:

(1)方式一

db.test.createIndex( { "createdAt": 1 }, { expireAfterSeconds: 3600 } )

expireAfterSeconds指定为3600秒后过期

(2)方式二

db.test.createIndex({"createdAt":1},{expireAfterSeconds:0})

此时以createdAt字段里的具体日期值为过期时间

注意:

(1)createdAt中的日期存入mongodb后为utc格式日期,但取出时会恢复为存入时的时区值,所以插入和取出时使用正常Date对像即可

(2)过期删除时,如果业务繁忙,负载有可能会比较高,建议用第二种方式定时为业务不繁忙时进行删除操作

重建索引

(1)获取所有索引

db.test.getIndexes()

(2)删除所有索引
db.test.dropIndexes()

(3)更改索引过期时间

db.runCommand({collMod:"test",index:{keyPattern:{createdAt:1},expireAfterSeconds:0}})

其它相关命令

命令行插入时间方式

db.test.insert( {"createdAt": new Date(),"logEvent": 2} )

格林威治时间转为毫秒数(java代码)

 
  1. /**

  2. * 将格林威治时间转为毫秒数

  3. * 格林威治时间格式:Wed Aug 08 00:00:00 CST 2018

  4. * @param time

  5. * @return

  6. */

  7. public static long greenwichStrToTimeMillSec(String time) {

  8. try {

  9. SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.US);

  10. Date date = sdf.parse(time);

  11. return date.getTime();

  12. } catch (ParseException e) {

  13. throw new Exception(ErrorCode.UNKNOWN_EXCEPTION, e.getMessage());

  14. }

  15. }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值