sem*_*man 3 java spring spring-mvc mongodb
我正在使用 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);
Run Code Online (Sandbox Code Playgroud)
注意 .IgnoreCase() 方法应用于 Sort.Order 对象。
Query .with 方法失败并抛出异常:
java.lang.IllegalArgumentException:给定的排序包含忽略大小写的 lastName 顺序!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);
Run Code Online (Sandbox Code Playgroud)
一切正常,当然我没有得到不敏感的排序结果。
因此我可能会得到 ABC a1 a2,而不是 A a1 a2 B C。
尽管异常提到 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);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3445 次 |
最近记录: |