Каков наилучший способ найти наиболее часто встречающееся значение в MongoDB? - PullRequest
2 голосов
/ 14 сентября 2011

Я ищу эквивалент SQL-запроса такого типа.

SELECT field, count(*) as counter from table order by counter DESC

Какой лучший способ добиться этого?

Спасибо

Ответы [ 2 ]

4 голосов
/ 14 сентября 2011

Используйте Map-Reduce.Сопоставьте каждый документ, указав ключ и значение 1, затем агрегируйте их, используя простую операцию сокращения.Смотри http://www.mongodb.org/display/DOCS/MapReduce

1 голос
/ 14 сентября 2011

Я бы обрабатывал запросы агрегации, отслеживая соответствующие значения отдельно, то есть в их собственной коллекции. Таким образом, вы можете просто запросить «наиболее часто встречающуюся» коллекцию. Недостаток: вам нужно выполнить еще одну запись при изменении данных.

Конечно, вы также можете время от времени обновлять эту коллекцию, используя Map / Reduce. Это немного зависит от того, насколько точной должна быть информация и как часто она меняется.

Убедитесь, однако, что не вызываете операцию Map / Reduce очень часто: она предназначена не для использования в интерактивном режиме (т. Е. Не для каждого просмотра страницы), а скорее в автономном процессе, который обновляет счетчики каждый раз. час или около того. Следовательно, если ваш счет меняется очень быстро, используйте коллекцию счетчиков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...