mongo设置自动过期删除索引

mongo设置自动过期删除索引

mongo数据类型与java对应关系

1
2
3
4
Date now = new Date();
BasicDBObject time = new BasicDBObject("ts", now);
coll.save(time);
//插入的记录 { "_id" : ObjectId("503993b20364129f6625d349"), "ts" : ISODate("2012-08-26T03:10:42.146Z") }
1
2
3
4
5
6
7
8
9
10
11
Java boolean   ------------  Mongodb Boolean
Java char ------------ Mongodb String
Java String ------------ Mongodb String
Java byte ------------ Mongodb 32-bit integer
Java short ------------ Mongodb 32-bit integer
Java int ------------ Mongodb 32-bit integer
Java long ------------ Mongodb 64-bit integer
Java float ------------ Mongodb Double
Java double ------------ Mongodb Double
Java util.Date ------------ Mongodb Date
Java Array ------------ Mongodb Array

ttl索引介绍

TTL索引是MongoDB中一种特殊的索引, 可以支持文档在一定时间之后自动过期删除。目前,TTL索引只能在单字段上建立,并且字段类型必须是date类型或者包含有date类型的数组(如果数组中包含多个date类型字段,则取最早时间为过期时间)

TTL索引生效机制

当你在集合中某一个字段建立TTL索引后,后台会有一个单线程,通过不断查询(默认60s一次)索引的值来判断document是否有过期,并且删除文档的动作还依据mongod实例的负载情况,如果负载很高,可能会稍微延后一段时间再删除。

创建索引方式1

1
2
3
4
5
6
7
8
9
// 创建索引方式1
db.log_events.createIndex( { "expireAt": 1 }, { expireAfterSeconds: 0 } );
db.log_events.insert( {
"expireAt": new Date('2023-11-01T02:47:00Z'),
"logEvent": 2,
"logMessage": "Success!"
} );
db.log_events.find();
db.log_events.getIndexes();

创建索引方式2

1
2
3
4
5
6
7
8
9
// 创建索引方式2
db.log_event.createIndex( { "expireAt": 1 }, { expireAfterSeconds: 60 } );
db.log_event.insert({
"expireAt": new Date(),
"logEvent": 2,
"logMessage": "Success!"
});
db.log_event.find();
db.log_event.getIndexes();

方式1可以指定在特定的时间进行删除,方式2是在数据产生多长时间后进行删除。


参考链接:

TTL Indexes — MongoDB Manual

Expire Data from Collections by Setting TTL — MongoDB Manual

Java数据类型和MongoDB数据类型对应关系_java mysql monodb 类型对应-CSDN博客

MongoDB支持的java数据类型和测试例子-java教程-PHP中文网

MongoDB—使用TTL索引自动删除过期数据_mongodb自动删除过期数据_爱思考的实践者的博客-CSDN博客

Mongodb设置TTL索引自动清理过期数据_mongottlday-CSDN博客