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");
上一篇 下一篇