问题描述
- mongoTemplate 查询结果,按子文档中的一个字段排序,要怎么实现?
- 要查询的mongo数据:
{_id"" : ***_class"" : ""***""downloadCount"" : {china"" : 20google"" : 10 }}{_id"" : ***_class"" : ""***""downloadCount"" : {china"" : 10google"" : 5 }}{_id"" : ***_class"" : ""***""downloadCount"" : {china"" : 15google"" : 2 }}
查询:
Query query = new Query(); query.with(new Sort(Direction.DESCdownloadCount.china"")); mongoTemplate.find(query this.getEntityClass());
错误信息:
java.lang.IllegalAccessError: org/springframework/beans/PropertyMatches at org.springframework.data.mapping.PropertyReferenceException.detectPotentialMatches(PropertyReferenceException.java:134) at org.springframework.data.mapping.PropertyReferenceException.<init>(PropertyReferenceException.java:59) at org.springframework.data.mapping.PropertyPath.<init>(PropertyPath.java:75) at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:327) at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:307) at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:291) at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:273) at org.springframework.data.mongodb.core.convert.QueryMapper$MetadataBackedField.getPath(QueryMapper.java:837) at org.springframework.data.mongodb.core.convert.QueryMapper$MetadataBackedField.<init>(QueryMapper.java:729)
查询子文档也是不可以,报相同的错误!!!!
query.addCriteria(Criteria.where(""downloadCount.china"").is(10));只有单层的查询和排序是可以正常的,但是我用mongo语句就是可以正常查询和排序的。
跪求大神帮助!!!
解决方案
解决了,原因是我的实体类中downloadCount是用JSONObject表示的,但我的查询是用的downloadCount.china,这样就导致spring找不到映射字段china,从而报错。
修改方法:将downloadCount写成内部类,china和google是其中的字段,如此就可以使用downloadCount.china查询或者排序了。
总结:spring-data-mongo 太TMD的不是东西了,就不能好好地对原生支持么XXX!
解决方案二:
http://www.zhihu.com/question/20291363
时间: 2024-08-04 10:56:38