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

相关文章

MongoTemplate 是Spring Data MongoDB 中的一个核心类,为 S...
笔者今天要分享的是一个项目重构过程中如何将数据库选型由原...
mongodb/mongoTemplate.upsert批量插入更新数据的实现
进入官网下载官网安装点击next勾选同意,点击next点击custom...
头歌 MongoDB实验——数据库基本操作
期末考试复习总结