spring-data-mongodb使用mongoTemplate操作mongoDb时@Indexed注解无效且没有自动创建索引该怎么办
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章给大家介绍spring-data-mongodb使用mongoTemplate操作mongoDb时@Indexed注解无效且没有自动创建索引该怎么办,内容非常详细,感兴趣的小伙伴们可以参考借鉴
千家信息网最后更新 2026年11月02日spring-data-mongodb使用mongoTemplate操作mongoDb时@Indexed注解无效且没有自动创建索引该怎么办
这篇文章给大家介绍spring-data-mongodb使用mongoTemplate操作mongoDb时@Indexed注解无效且没有自动创建索引该怎么办,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
先上代码 ,下面的 "异常" 代码是否会自动创建索引呢?
//订单doc@Data@Accessors(chain = true)@FieldNameConstants@Document(collection = "order_")public class Order implements Serializable { @Id private String id; @Indexed private String tid; @Indexed private String tradeId; private String status; private String created;}//使用mongoTemplate做插入操作,按照月份分表mongoTemplate.insert(orderRecord, mongoTemplate.getCollectionName(Order.class) + month);答案是 :会的!
那为什么说是异常代码呢,因为它没有达到我的预期,这段代码会有两个问题:
1、会在mongodb里边创建两个 collection : order_ 和 order_${month}
2、索引会创建在 "order_" 这个collection里边,而不会在 "order_${month}"
这个时候答案就很明显了:自动创建索引的时候 ,读取的collectionName 是 @Document注解里边的值,而不是 insert的时候传入的值。
结论已经有了,就该看看它是怎么把传入的 collectionName弄丢的了
通过debug可以找到创建索引相关类以及方法的调用路径:

这个是方法签名:
checkForIndexes((MongoPersistentEntity>) entity);
最终只剩下了entity。通过entity的@Document注解来获取collectionName。细节就不贴图了,建议去debug下看看源码。
原因找到了,最终要如何解决当前的问题呢?上代码:
//字段索引 IndexOperations indexOps2 = mongoTemplate.indexOps(orderCollectionName); String[] indexFields2 = Arrays.stream(Order.class.getDeclaredFields()) .filter(f -> f.isAnnotationPresent(Indexed.class)) .map(Field::getName) .toArray(String[]::new); for (String indexField : indexFields2) { if (StringUtils.hasText(indexField)) { indexOps2.ensureIndex(new Index(indexField, Sort.Direction.ASC)); } }至此,问题解决。
最后别忘了把@Document注解去掉。
关于spring-data-mongodb使用mongoTemplate操作mongoDb时@Indexed注解无效且没有自动创建索引该怎么办就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
索引
注解
代码
时候
问题
怎么办
上代
两个
内容
方法
更多
答案
帮助
不错
明显
会创
兴趣
分表
原因
字段
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技公司起名
互联网为科技
互联网医疗科技
期待互联网科技
汇久创客互联网科技
上海致骋互联网科技
哈尔滨新华互联网科技
顺网科技2021年互联网排名
互联网实体化科技化
互联网时代科技改变生活
互联网和黑科技的看法
消费医药和互联网科技
互联网科技大奖都有哪些公司
烟台灵鸽互联网科技有限公司
中科明德北京互联网科技
互联网时代的科技公司
每天都有哪些好的互联网科技
电子商务与互联网科技的关系
北京天晋互联网科技有限公司
深圳互联网科技园地址
远信互联网科技
丰台科技园 互联网
互联网 新科技
深圳卡尔迅互联网科技有限公司怎么样
现代互联网科技股
河南猎农互联网科技有限公司
广西互联网科技孵化中心
科技类公司包括互联网吗
东风日产互联网科技公司叫什么
如何强化互联网金融科技