我正在使用Spring-Data-mongodb对MongoDB执行所有类型的请求。
尝试执行分页时使用ignore case排序我得到一个例外,
这是我的代码:
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 Method失败并抛出异常:
java.lang.IllegalArgumentException:给定sort包含lastName的Order with ignore case! 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);
一切正常,但当然我没有得到不敏感的排序结果。
因此我可能得到A B C a1 a2,而不是A a1 a2 B C.
即使异常提到mongoDB不支持IgnoreCase排序,我使用的是mongo 3.4,在我的理解中它确实支持ignoreCase选项进行可分页排序(Here's the official JIRA issue regarding insensitive search feature added),而我的spring-data-mongodb包是1.8。
答案 0 :(得分:3)
很抱歉,如果我的评论不清楚。您需要使用排序查询发送排序规则。
强度主要和次要两者都将提供不区分大小写的排序。确保在排序查询中使用完全的排序规则标准以利用索引。
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);