Java Spring Mongo排序忽略大小写问题
我正在使用Spring-Data-mongodb对MongoDB执行各种请求。
当尝试使用忽略大小写执行分页和排序时,出现异常,
这是我的代码:
Sort.Order order = new Sort.Order(ascending? Sort.Direction.ASC: Sort.Direction.DESC, sortKey).ignoreCase(); Query query = new Query(filter).with(new PageRequest(page, size, new Sort(order)));
return mongoTemplate.find(query, clazz,collection);
注意在Sort.Order对象上应用的.IgnoreCase()方法。
Query .with方法失败,并引发异常:
java.lang.IllegalArgumentException:给定的排序包含带有忽略大小写的lastName的Order!MongoDB当前不支持排序忽略大小写!在org.springframework.data.mongodb.core.query.Query.with(Query.java:179)在org.springframework.data.mongodb.core.query.Query.with(Query.java:162)
如果删除.IgnoreCase()方法,即执行以下代码:
Sort.Order order = new Sort.Order(ascending? Sort.Direction.ASC: Sort.Direction.DESC, sortKey);Query query = new Query(filter).with(new PageRequest(page, size, new Sort(order)));
return mongoTemplate.find(query, clazz,collection);
一切正常,除了我当然不会得到不敏感的排序结果。
因此我可能会得到ABC a1 a2,而不是A a1 a2 BC。
即使该异常提到mongoDB不支持IgnoreCase排序,但我使用的是mongo
3.4,据我所知,它确实支持可分页排序的ignoreCase选项(这是有关不敏感搜索功能的官方JIRA问题),以及我的spring-
data-mongodb包是1.8。
回答:
对不起,如果我的评论不清楚。您必须使用排序查询发送归类。
强度主要和次要都将提供不区分大小写的排序。确保在排序查询中使用确切的排序规则条件以利用索引。
Sort.Order order = new Sort.Order(ascending? Sort.Direction.ASC: Sort.Direction.DESC, sortKey);Query query = new Query(filter).with(new PageRequest(page, size, new Sort(order)));
query.collation(Collation.of("en").strength(Collation.ComparisonLevel.secondary()));
return mongoTemplate.find(query, clazz,collection);
以上是 Java Spring Mongo排序忽略大小写问题 的全部内容, 来源链接: utcz.com/qa/417608.html