mongodb数据条目过期设置

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代码)

/**
     * 将格林威治时间转为毫秒数
     * 格林威治时间格式:Wed Aug 08 00:00:00 CST 2018
     * @param time
     * @return
     */
    public static long greenwichStrToTimeMillSec(String time) {
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.US);
            Date date = sdf.parse(time);
            return date.getTime();
        } catch (ParseException e) {
            throw new Exception(ErrorCode.UNKNOWN_EXCEPTION, e.getMessage());
        }
    }

 

你可能感兴趣的:(mongodb)