spring-data-mongodb使用mongoTemplate操作mongoDb时@Indexed注解无效且没有自动创建索引该怎么办
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,这篇文章给大家介绍spring-data-mongodb使用mongoTemplate操作mongoDb时@Indexed注解无效且没有自动创建索引该怎么办,内容非常详细,感兴趣的小伙伴们可以参考借鉴
千家信息网最后更新 2025年12月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安全错误
数据库的锁怎样保障安全
南宁诺信网络技术有限公司
网络安全扫描器的设计
SRJ1909 签名验签服务器
网络安全黑龙江省
php连接mdb数据库
河南网络技术专业考什么科目
欧拉系统什么服务器软件
申论热点范文 网络安全
安徽一对一网络技术服务哪家好
大连宝业软件开发有限公司
软件开发的员工守则
软件开发公司属于高新企业么
无锡运营软件开发价格
邯郸软件开发开发培训培训
河南卫星授时服务器
浙江校园预付费软件开发
手机拨号总是无法连接到服务器
最便宜的香港服务器地址
网络安全规范操作手册
广州魏你互联网科技有限公司
怎么找玩过的服务器方舟
康养数据库
软件开发适合什么企业
北京有竹子居网络技术有限公司
网络安全管理证书
云南省网络安全在线知识
软件开发管理 课程
金华云软件开发流程
网络安全规范操作手册
pubg为什么总是服务器崩溃