MongoDB запрашивает большие наборы данных - PullRequest
0 голосов
/ 15 октября 2019

Допустим, у меня есть простая структура документа, такая как:

    {
     "item": { 
          "name": "Skittles",
          "category": "Candies & Snacks"
     }
    }

На моей странице поиска, когда пользователь ищет название продукта, я хочу иметь параметры фильтра по категории.

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

Теперь поиск элемента по имени разбит на страницы. Я показываю только 30 пунктов на странице. И в нашей базе данных десятки тысяч элементов.

Я могу искать и извлекать все элементы со всех страниц, а затем анализировать категории. Но если я получу десятки тысяч элементов на 1 странице, это будет очень медленно.

Есть ли способ оптимизировать этот запрос?

1 Ответ

0 голосов
/ 19 октября 2019

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

  1. Использование отличных перед выполнением запроса для большого набора данных
  2. Использование Агрегационный конвейер от имени @Luciaпредлагается
[{$group: { _id: "$item.category" }}] 
Используйте другое хранилище данных (redis или mongo itselff) для хранения информации по категориям

Наконец, на основе выбранного вами подхода и притока запросов на фильтры вы можете рассмотреть индексирование некоторые поля

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

...