Pymongo设置expireAfterSeconds为10分钟报索引冲突如何解决
解决Pymongo修改MongoDB TTL索引过期时间冲突问题
报错原因
MongoDB不允许在同一个字段上重复创建配置不同的同名索引,你之前已经在createdAt字段上创建了过期时间为3分钟的TTL索引,默认生成的索引名为createdAt_1,直接修改expireAfterSeconds参数重新创建索引会触发配置冲突。
解决方案
你可以选择以下任意一种方式将过期时间修改为10分钟:
方案1:删除旧索引后重建新TTL索引
适合数据量较小的场景,操作简单:
- 第一步先删除已存在的旧TTL索引
# 方式1:按索引名删除 db.temp.drop_index("createdAt_1") # 方式2:按索引字段+排序规则删除 # db.temp.drop_index([("createdAt", 1)])
- 第二步重新创建过期时间为10分钟的TTL索引
注意:
ensure_index方法在新版Pymongo中已被弃用,推荐使用create_index方法
db.temp.create_index("createdAt", expireAfterSeconds=10*60)
方案2:直接修改现有TTL索引的配置
无需删除索引,适合数据量大、需要避免重建索引产生性能开销的场景,直接调用collMod命令修改现有索引参数即可:
db.command( "collMod", "temp", index={ "name": "createdAt_1", "expireAfterSeconds": 10*60 } )
注意事项
- TTL索引的后台清理线程默认每60秒执行一次,修改配置后最多等待1分钟即可生效
- 修改过期时间不会影响已插入数据的过期判断逻辑,MongoDB会按照新的过期时间重新计算所有
createdAt字段对应的过期时间点
内容的提问来源于stack exchange,提问作者Divya
相关产品推荐
相关产品推荐

