2010-10-03 4 views
2

Как ограничить количество результатов при использовании group() в MongoDB? В основном я ищу эквивалент этого запроса MySQL:Ограничить результаты группы() в MongoDB

SELECT * FROM items GROUP BY type LIMIT 5;

Edit: Я просто понял, что это можно сделать с помощью Map/Reduce, но я читал, что с помощью Map/Reduce на один сервер (мой случай) немного перебор. Это правда? В конечном счете, какой лучший способ добиться того, что мне нужно?

ответ

5

Проблема с группой в том, что на самом деле это не будет сделано. Он просто возвращает массив из всех групп.

Вы можете использовать Map/Reduce, чтобы решить эту проблему:

  1. , выдавшего Map/Reduce (в температуре или постоянной коллекции)
  2. Performing находку на этой коллекции с .limit (5) на курсоре, который возвращается

Карта/Уменьшить на одном сервере не переборщить с MongoDB. Тем не менее, вы работаете с компромиссом «скорость/пространство». Теоретически вы можете запускать временную карту - каждый раз, когда вам нужны эти данные. Однако, если вы это сделаете много, вам, вероятно, захочется запланировать сокращение карты и запросить хранилище, поскольку карты-сокращения не дешевы.

+0

Я должен делать это на каждой странице загрузки, что может быть «много», я думаю. Итак, в основном из того, что я понимаю, слишком сложно получить эти данные в режиме реального времени? Должен ли я настраивать задание cron для периодического запуска Map/Reduce? – pt2ph8

+0

MapReduce в mongodb не очень быстро. – TTT

+0

Да, загрузка каждой страницы слишком часто. Вы определенно захотите запланировать cron для M/R. –

Смежные вопросы