Индекс MongoDB и поиск значения, разделенного запятыми

У меня есть структура, как показано ниже

{
  "name": "",
  "age": 35,
  "hobbies": "gardening, skiing, horse riding, soccer",
  "Address": {
    "addrline 1": "",
    "addrline 2": "",
    "City": "",
    "Zip": ""
  }
}

Хотел бы искать на основе хобби. например для ввода "лыжи" следует вернуть этот документ. У меня около 80к записей. Какой будет лучшая стратегия индексации для элемента «хобби», чтобы он мог быстро возвращать результат.

Должен ли я искать «хобби» только по шаблону регулярного выражения на основе строк или есть какой-либо другой метод для более быстрого поиска данных?


person Debopam    schedule 19.09.2016    source источник


Ответы (1)


Лучшим дизайном было бы хранить хобби в виде массива

 "hobbies": ["gardening", "skiing", "horse riding", "soccer"]

Затем вы можете использовать запрос $in для соответствия любому одному или нескольким увлечениям. Создайте индекс для ключа хобби для более быстрого запроса.

person DhruvPathak    schedule 19.09.2016
comment
Полностью согласен с @DhruvPathak, возможно, вы можете запустить скрипт или команду и превратить значение, разделенное запятыми, в массив. Затем добавьте многоключевой индекс для хобби, таким образом вам не придется выполнять запрос регулярных выражений, регулярные выражения неэффективны в использование индексов для более быстрого поиска. - person Rahul Kumar; 19.09.2016