Каков наилучший подход для запроса mongodb с суммой и сортировкой - PullRequest
0 голосов
/ 16 февраля 2012

Итак, я перевожу часть своего кода из sql в mongodb, и есть несколько вещей, которые мне еще не очень понятны.

Допустим, у меня есть следующий простой SQL-запрос (просто пример)

select count(a.id) as count, b_id 
       from table group by b_id 
       where c_id=[SOME ID] 
       group by b_id
       order by count desc;

Полагаю, все понимают, что это делает.

Теперь с Монго я могу использовать несколько подходов, делать все это на стороне Монго, извлекать суммированные результаты и сортировать их на стороне клиента или просто передавать необработанные данные на сторону клиента и выполнять всю обработку там.

Каков наилучший подход для вышеприведенного запроса: сделать все это в базе данных с некоторым внутренним механизмом mongodb (mapreduce и т. Д.) Или получить коллекцию на стороне клиента и обработать ее там. В целом набор данных будет огромным, но при необходимости запрос может быть разбит на несколько частей.

Клиент основан на Java, если это имеет значение.

Ответы [ 2 ]

2 голосов
/ 16 февраля 2012

С готовящейся MongoDB Aggregation Framework довольно легко сделать то, что вам нужно. Он уже доступен в разрабатываемых версиях 2.1.x.

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

update({..}, {$push:{array:element}, $inc:{elementCount:1})
1 голос
/ 16 февраля 2012

Вы можете сгруппировать данные на стороне монго, используя Map / Reduce , а затем отсортировать их на стороне клиента или на стороне монго. Вы также можете найти карту / уменьшить пример здесь.

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