https://docs.mongoing.com/indexes/index-properties/ttl-indexes
mongoDB TTL 官方文档
设置ttl索引命令
db.pojo.getIndexes()
db.pojo.createIndex({ "expireAt": 1 }, { expireAfterSeconds:0})
Spring Data Mongodb 3.X版本后
在实体类的字段上增加注解
@Data
@Document(collection = "pojo")
public class Pojo {
/*** 自定义mongo主键 加此注解可自定义主键类型以及自定义自增规则
* 若不加 插入数据数会默认生成 ObjectId 类型的_id 字段
* org.springframework.data.annotation.Id 包下
* mongo库主键字段还是为_id 。不必细究(本文实体类中为id)
*/
@Id
private ObjectId id;
private String username;
private Integer value;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") //前台传数据到后台
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss ",timezone="GMT+8")// 后台传数据到前台
private Date timer;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") //前台传数据到后台
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss ",timezone="GMT+8")// 后台传数据到前台
@Indexed(name = "expireAt",expireAfterSeconds = 0)
private Date expireAt;
}
在yml中配置
spring.data.mongodb.auto-index-creation=true
插入数据时使用时间偏移,mongo自己会每隔60秒删一次过期数据
Pojo pojo = new Pojo();
pojo.setUsername(UUID.randomUUID().toString());
pojo.setValue(RandomUtil.randomInt(1, 100));
pojo.setTimer(new Date());
Date date = new Date();
DateTime dateTime = DateUtil.offsetDay(date, 1);
pojo.setExpireAt(dateTime);
mongoTemplate.insert(pojo,"pojo");