微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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: Given sort contained an Order for lastName with ignore case! MongoDB does not support sorting ignoreing case currently!
at org.springframework.data.mongodb.core.query.Query.with(Query.java:179)
at 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 BC.

即使该异常提到mongoDB不支持IgnoreCase排序,但我使用的是mongo 3.4,据我所知,它确实支持分页排序(Here’s the official JIRA issue regarding insensitive search feature added)的ignoreCase选项,而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);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐