Rails 3 и mongoid: как бы вы отсортировали / сгруппировали данные для отображения в виде таблицы 2 измерений? - PullRequest
3 голосов
/ 08 марта 2011

У меня есть модель пользователя со многими полями, и я хотел бы отобразить Таблица в виде матрицы из 2 этих полей: - создан в - тип Для созданного_ я просто использовал group_by так:

(User.where(:type => "blabla" ).all.group_by { |item| 
item.send(:created_at).strftime("%Y-%m-%d") }).sort.each do | 
creation_date, users| 

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

На данный момент это нормально, потому что у меня есть только несколько типов, но это число скоро увеличится намного больше, и в Боюсь, это не будет эффективным.

Есть предложения о том, как мне достичь ожидаемых результатов?

Спасибо,

Alex

1 Ответ

4 голосов
/ 09 марта 2011

Общий ответ здесь - выполнить Map / Reduce . Как правило, вы не выполняете уменьшение карты в реальном времени из-за ограничений производительности. Вместо этого вы запускаете карту-сокращение по расписанию и напрямую запрашиваете результаты.

Вот учебник по map-lower для Ruby . Вот другой пример с использованием Mongoid специально.

...