mongodb поиск без учета регистра

Как сделать запросы без учета регистра в Mongodb?

Как я могу запросить регистр нечувствителен? Я хочу найти результат, даже если «Андрей»;

10 ответов:

или с префиксом match (корневое регулярное выражение) как:

вам нужно будет использовать регистр без учетарегулярные выражения для этого, например,

чтобы использовать шаблон регулярных выражений из вашего thename переменная, построить новый и

Если вы хотите запросить «точное совпадение без учета регистра», то вы можете пойти так.

Я только что решил эту проблему несколько часов назад.

вы даже можете расширить это, выбрав нужные вам поля из объекта пользователя Andrew, сделав это следующим образом:

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

наверное, самый простой способ сделать это-установить параметры сортировки в базе данных. Затем все запросы наследуют эту сортировку и будут использовать ее:

вы также можете сделать это так:

и использовать его как это:

это вернет городов под названием «Нью-Йорк», «Нью-Йорк», «Нью-Йорк» и др.

следующий запрос найдет документы с требуемой строкой нечувствительно и с глобальным возникновением также

чтобы найти строку литералов без учета регистра:

С помощью regex (рекомендуется)

используя нижний регистр индекса (быстрее)

регулярные выражения работают медленнее, чем буквальное совпадение строк. Однако, дополнительные поля в нижнем регистре будет увеличить сложность кода. Если вы сомневаетесь, используйте регулярные выражения. Я бы предложил использовать только явно строчное поле, если оно может заменить ваше поле, то есть вас не волнует случай в первом место.

можно использовать Индексы Без Учета Регистра:

в следующем примере создается коллекция без параметров сортировки по умолчанию, а затем добавляется индекс в поле имя с параметрами сортировки без учета регистра. международные составляющие для Unicode

чтобы использовать индекс, запросы должны указывать те же параметры сортировки.

или вы можете создать коллекцию с сортировки по умолчанию:

чтобы найти строку без учета регистра используйте это,

Источник

Поиск без учета регистра в Mongo

Я использую нечувствительный к регистру поиск в Mongo, что-то похожее на https://stackoverflow.com/q/5500823/1028488.

ie я использую регулярное выражение с параметрами i. Но у меня возникли проблемы с ограничением регулярного выражения только этим словом, его выполнение больше похоже на «Like» в SQL

пробовал /^win$/ но его sayin недействителен формат JSON. Пожалуйста, предложите способ.

5 ответов

можно использовать ‘$regex’:’^win$’ или /^win$/i (обратите внимание, нет цитаты на второй)

точный регистр string

не содержит string

сохраните это как закладку и ссылку на любые другие изменения, которые вы можете необходимость. http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/

обновление: начиная с MongoDB 2.4 для этого будет использоваться «текстовый» индекс и полнотекстовый поисковый запрос. Вы можете прочитать о них здесь. Если использовать недавний MongoDB, подход ниже будет глупым и ненужным.

однако, если у вас есть MongoDB

обратите внимание,что нечувствительные к регистру запросы не используют индекс, поэтому может иметь смысл сделать поле в нижнем регистре, чтобы вы могли ускорить этот запрос.

Go здесь для получения дополнительной информации о RegularExpressions

для чувствительных к регистру децибел.пользователи.найти (<"name": "Vi">) или дБ.пользователи.найти (<"email":"example@mail.com">)

поиск в таблице пользователей

name-это имя столбца и текст» Vi», который выполняется поиск

Источник

MongoDB и C#: поиск без учета регистра

недавно я обнаружил, что все запросы в MongoDB чувствительны к регистру. Как я могу сделать поиск без учета регистра?

Я нашел один способ сделать это:

9 ответов

самый простой и безопасный способ сделать это с помощью Linq :

этот пример будет генерировать:

на делает его нечувствительным к регистру.

Я просто реализовано это намного проще, чем любые другие предложения. Однако я понимаю, что из-за возраста этого вопроса эта функциональность, возможно, не была доступна в то время.

вам не нужно дважды вести записи для поиска.

попробовать использовать что-то вроде этого:

вам, вероятно, придется хранить поле дважды, один раз с его реальным значением и снова во всех строчных буквах. Затем вы можете запросить строчную версию для поиска без учета регистра (не забудьте также записать строку запроса в нижнем регистре).

этот подход работает (или необходим) для многих систем баз данных, и он должен работать лучше, чем методы на основе регулярных выражений (по крайней мере, для префикса или точного соответствия).

Как ответил i3arnon, вы можете использовать Queryable для выполнения сравнения/поиска без учета регистра. Я обнаружил, что не могу использовать веревку.Метод Equals (), потому что он не поддерживается. Если вам нужно сделать сравнение, Contains (), к сожалению, не подходит, что заставило меня бороться за решение в течение довольно долгого времени.

в случае, если кто-то еще задается вопросом, используя свободно-монго add-on, вы можете использовать Linq для запроса:

что приводит к правильному JS-запросу. К Сожалению, Стринг.Equals () пока не поддерживается.

вы также можете использовать встроенные фильтры MongoDB. Это может облегчить использование некоторых методов монго.

способ сделать это-использовать MongoDB.Бсына.Класс BsonJavaScript, как показано ниже

я успешно ищу с нечувствительным к регистру: 1. Создание индекса с параметрами сортировки для локали (e.g: «en») и с силой 1 или 2. См.https://docs.mongodb.com/manual/core/index-case-insensitive/ для дальнейшего подробности

создайте сортировку с силой 1 или 2 для нечувствительного к регистру

создать индекс. В моем случае я индексирую несколько полей:

при запросе убедитесь, что вы используете те же параметры:

Источник

MongoDB: Можно ли сделать запрос без учета регистра?

23 ответа

Вы можете использовать regex.

В вашем примере это будет:

Я должен сказать, хотя, может быть, вы могли бы просто изменить (или высвободить) значение на пути, а не приносить дополнительную стоимость каждый раз, когда найдете его. Очевидно, что это не будет работать для имен людей и т.д., Но, возможно, для использования в виде тегов.

UPDATE:

ОРИГИНАЛЬНЫЙ ОТВЕТ:

Следует отметить, что поиск с регистрозависимым регистром нечувствителен /i означает, что mongodb не может искать по индексу, поэтому запросы к большим наборам данных могут занять много времени.

Даже с небольшими наборами данных он не очень эффективен. Вы получаете гораздо больший хит процессора, чем ваши ордера на запрос, что может стать проблемой, если вы пытаетесь достичь масштаба.

В качестве альтернативы вы можете сохранить заглавную копию и выполнить поиск по ней. Например, у меня есть таблица User, у которой есть имя пользователя, которое является смешанным случаем, но идентификатор является заглавной копией имени пользователя. Это гарантирует, что дублирование с учетом регистра невозможно (наличие «Foo» и «foo» не будет разрешено), и я могу выполнить поиск по чтобы получить поиск по имени пользователя без учета регистра.

Если ваше поле большое, например тело сообщения, дублирование данных, вероятно, не является хорошим вариантом. Я считаю, что использование альтернативного индексатора, такого как Apache Lucene, является лучшим вариантом в этом случае.

Источник

MongoDB: можно ли сделать запрос без учета регистра?

24 ответа

В вашем примере это будет:

Однако я должен сказать, что, возможно, вы могли бы просто уменьшить (или увеличить) значение по пути, вместо того, чтобы нести дополнительные расходы каждый раз, когда вы его найдете. Очевидно, что это не сработает для имен людей и тому подобного, но, возможно, для таких случаев, как теги.

ОБНОВЛЕНИЕ:

ОРИГИНАЛЬНЫЙ ОТВЕТ:

Следует отметить, что поиск с нечувствительностью к регистру регулярных выражений / i означает, что mongodb не может выполнять поиск по индексу, поэтому запросы к большим наборам данных могут занять много времени.

Даже с небольшими наборами данных это не очень эффективно. Вы получаете гораздо большее количество ЦП, чем требует ваш запрос, что может стать проблемой, если вы пытаетесь достичь масштаба.

Если ваше поле большое, например, тело сообщения, дублирование данных, вероятно, не лучший вариант. Я считаю, что в этом случае лучшим вариантом будет использование стороннего индексатора, такого как Apache Lucene.

Я лично отправил электронное письмо одному из основателей с просьбой заставить это работать, и он сделал это! Это была проблема в JIRA с 2009 года, и многие запрашивали эту функцию. Вот как это работает:

Индекс без учета регистра создается путем указания параметров сортировки с силой 1 или 2. Вы можете создать индекс без учета регистра следующим образом:

Вы также можете указать параметры сортировки по умолчанию для каждой коллекции при их создании:

В любом случае, чтобы использовать индекс без учета регистра, вам необходимо указать в операции find то же сопоставление, которое использовалось при создании индекса или коллекции:

Это вернет «Нью-Йорк», «Нью-Йорк», «Нью-Йорк» и т. Д.

Прочие примечания

Ответы, предлагающие использовать регулярные выражения, медленные, потому что даже с индексами в документации говорится:

Если вам нужно создать регулярное выражение из переменной, это гораздо лучший способ сделать это: https://stackoverflow.com/a / 10728069/309514

Затем вы можете сделать что-то вроде:

Преимущество этого заключается в том, что он более программный, или вы можете повысить производительность, скомпилировав его заранее, если вы его повторно используете.

Имейте в виду, что предыдущий пример:

Возможно, вам придется сделать так, чтобы он соответствовал только поисковому запросу, используя соответствующий синтаксис регулярного выражения, как:

Источник

Понравилась статья? Поделить с друзьями:
Добавить комментарий
  • Как сделать успешный бизнес на ритуальных услугах
  • Выездной кейтеринг в России
  • Риски бизнеса: без чего не обойтись на пути к успеху
  • moneywall кредит на авиабилет
  • moneyveo личный кабинет кредит