MongoDB регистр без учета регистра не работает - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть коллекция пользователей, и одно из полей документа называется leaderboard_name. Это текстовое поле, и я хочу иметь возможность запрашивать его без учета регистра.

Поэтому я создал новый индекс с настраиваемым сопоставлением, следуя Пн go документам . Я создал это, используя компас GUI, и установил locale = en, сила = 1 и оставил все остальное по умолчанию:

enter image description here

У меня есть следующее документ, который я хочу запросить:

{
  leaderboard_name: "johndoe"
}

Я ожидал с этим индексом, что смогу запросить JOHNDOE и найти этот документ, но я не получаю никаких результатов. Только при поиске с соответствующим регистром я получаю совпадение.

Даже в плане объяснения говорится, что в запросе не использовались индексы:

enter image description here

Это MongoDB 4.0.16, и я понимаю, что поддержка сортировки без учета регистра существует примерно с 3.4. Я посмотрел на этот ответ , и кроме использования компаса для создания индекса вместо оболочки go, я думаю, я сделал все остальное так же.

1 Ответ

0 голосов
/ 04 марта 2020

В случае, если кто-то еще наткнется на это, решение состоит в том, чтобы убедиться, что запрос включает в себя детали сортировки. В моем случае это означало изменение моего Java запроса на:

private final static Collation IGNORE_CASE =
        Collation.builder()
                .locale("en")
                .collationStrength(CollationStrength.PRIMARY)
                .build();

Document user =
        userCollection
                .find(new Document("leaderboard_name", "johndoe"))
                .collation(IGNORE_CASE)
                .first();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...