Java Spring Mongo сортировка игнорировать вопрос случая
Я использую Spring-Data-mongodb, выполняя все виды запросов к MongoDB.
При попытке выполнить paging & sort с 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);
Обратите внимание .Метод IgnoreCase() применяется к сортировке.объект order.
Запрос .метод with терпит неудачу и выдает исключение:
Java.яз..IllegalArgumentException: Данный сорт содержал порядок для фамилии с игнорируемым регистром! MongoDB не поддерживает сортировку игнорирование дела в настоящее время!
в орг.весенняя рамка.данные.монгодб.ядро.запрос.Запрос.с запросами.java: 179)
в орг.весенняя рамка.данные.монгодб.ядро.запрос.Запрос.с запросами.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 для сортировки по страницам (вот официальная проблема JIRA относительно нечувствительной функции поиска, добавленной), и мой пакет spring-data-mongodb равен 1.8.
1 ответ:
Извините, если мои комментарии не были понятны. Вы должны отправить параметры сортировки с помощью запроса сортировки.
Сила первичная и вторичная оба обеспечат нечувствительный к регистру вид. Убедитесь,что вы используете точные критерии сортировки в запросе сортировки, чтобы воспользоваться преимуществами индекса.
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);
Comments