You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot MongoDB TimeSeries集合设置expireAfterSeconds不生效问题咨询

问题原因分析
  • 时序集合的TTL过期规则不支持通过普通字段索引的expireAfterSeconds配置:MongoDB对时序集合的自动过期有专属配置规则,不能像普通集合一样直接在时间字段上加带过期属性的索引实现,你加在timestamp字段上的索引配置不会被时序集合识别。
  • @TimeSeries注解本身提供专属的过期配置参数:spring-data-mongodb针对时序集合的TTL能力,是直接在@TimeSeries注解上通过expireAfterSeconds属性声明,不需要额外在时间字段加索引配置。
  • 已存在的集合不会自动更新配置:如果你的temp集合已经在数据库中创建过,后续修改实体类注解不会自动触发集合配置更新,需要手动删除旧集合或者手动修改集合过期属性。
正确配置方案

修改实体类配置如下:

@TimeSeries(collection = "temp", 
        timeField = "timestamp", 
        metaField = "probeId", 
        granularity = Granularity.SECONDS,
        // 直接在@TimeSeries注解配置过期时间
        expireAfterSeconds = 60)
public final class Temperature {

    public String probeId;
    // 移除字段上的@Indexed过期配置,时序集合时间字段默认会被索引
    public Instant timestamp;
    public int value;

    public Temperature () {
    }
}
生效注意事项
  • 若你是首次创建该集合,重启Spring Boot应用后框架会自动创建带TTL规则的时序集合,过期配置自动生效。
  • 若集合已经存在,可选择两种处理方式:
    • 测试环境可直接删除已存在的temp集合,重启应用后自动重建即可生效。
    • 生产环境可通过MongoDB shell执行命令修改现有集合的过期属性:db.runCommand({ collMod: "temp", expireAfterSeconds: 60 })
  • 验证配置是否生效可执行MongoDB命令:db.getCollectionInfos({name:"temp"}),查看返回结果中的options.expireAfterSeconds字段是否为你设置的数值。

内容的提问来源于stack exchange,提问作者provincjalc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 00:30:00