spring-data-mongodb使用mongoTemplate操作mongoDb时@Indexed注解无效且没有自动创建索引该怎么办
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,这篇文章给大家介绍spring-data-mongodb使用mongoTemplate操作mongoDb时@Indexed注解无效且没有自动创建索引该怎么办,内容非常详细,感兴趣的小伙伴们可以参考借鉴
千家信息网最后更新 2025年02月01日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安全错误
数据库的锁怎样保障安全
电信itv服务器地址
湖南学习软件开发排名
软件开发设计公司简介
蚂蚁森林服务器一直连不上怎么办
网络安全和信息化委员会智能
什么叫移动app软件开发
游戏服务器一直无法上网
oracle数据库断电
直播软件开发执照经营范围
轻薄本可以软件开发吗
无法登录sekiro游戏服务器
软件开发商停用
vss服务器搭建
网络安全法实施一年来
互联网是否属于科技股
新安服务器
ctf网络安全大赛著名选手
软件开发阶段花费最多的是
网络安全的活动总结50字
数据库知识基础笔试题
软件开发工程师的称呼
android数据库更改表
电脑服务器到底干什么的
网络技术手段买彩票
维护网络安全的合理化建议
创业板网络安全改革
网络技术研报
计算机网络技术web是什么
网络技术有flash吗
源城软件开发定制