Как мне скопировать эту группу в MongoDB.Я наткнулся на эту превосходную статью - http://kylebanker.com/blog/2009/11/mongodb-count-group/
Во-первых, это 2-летняя статья.Эти операторы (count
, group
, distinct
) все еще работают, но работают довольно медленно.Использование любого из этих операторов означает запуск Map / Reduce.И я не уверен, что для этих операторов когда-либо был реализован шардинг ( обратите внимание, что сообщение в блоге предшествует шардингу ).
Современный способ сделать это - использовать новый Структура агрегации .Это гораздо быстрее и поддерживает шардинг.Тем не менее, он все еще находится в нестабильной сборке.
Это показывает, как вы можете использовать group by в Mongo, но не говорит о том, как реализовать order by и limit внутри группы.
Преобразуемый вами запрос является простым запросом в SQL, но это не простой запрос в MongoDB.Проблема, с которой вы, вероятно, сталкиваетесь с Mongoid, заключается просто в том, что вы делаете то, что MongoDB просто не поддерживает ( за пределами новой структуры агрегации ).
Если у вас нет доступа кAggregation Framework, вам нужно будет сделать это в несколько шагов.
- Запустить M / R, чтобы получить
count(*) grouped by X
. - Выполнить запрос на вывод M / R сваш
sort()
, skip()
, limit()
. - Выше может не работать, если у вас слишком много данных для сортировки (~ 1M пользователей), вам может понадобиться проиндексировать вывод M / Rчтобы сортировка работала.