Java Spring Mongo排序忽略案例问题

时间:2018-01-04 10:43:45

标签: java spring mongodb spring-mvc

我正在使用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。

1 个答案:

答案 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);