Как "Группировать по" с MongoDB - PullRequest
6 голосов
/ 09 июля 2010

Я хотел бы знать, могу ли я в любом случае «группировать» свои результаты с помощью MongoDB / Php.

Это код, который я использую для отображения моих строк:

$count = $col->find(array('order_id' => array('$gt' => '0')))->count();

Мне нужно сгруппировать их по order_id.

Очевидно, мы не можем сделать count() для group() как find()

РАБОТЫ: $countfind = $col->find()->count();

НЕ РАБОТАЕТ: $countgroup = $col->group($keys)->count();

Мне нужно сосчитать эту группу, пожалуйста.

Спасибо за вашу помощь.

Ответы [ 3 ]

2 голосов
/ 03 апреля 2012

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

$ages = $dm->createQueryBuilder('User')
->distinct('age')
->getQuery()
->execute();

http://docs.doctrine -project.org / проекты / Доктрина-MongoDB-ODM / о / последний / ссылка / запрос-строитель-api.html

0 голосов
/ 24 мая 2013

Новый ответ с использованием структуры агрегирования Mongo

После того, как этот вопрос был задан и получен ответ, 10gen выпустила Mongodb версии 2.2 с инфраструктурой агрегации. Так что новый лучший способ сделать Group By - это оператор $ group . В PHP используйте MongoCollection :: aggregate .

К вашему сведению, 10gen также имеет удобную таблицу преобразования SQL в Mongo Aggregation стоит добавить в закладки В нем приведены примеры всех распространенных SQL-запросов, использующих агрегирование SQL, и способы их перевода в Mongo.

0 голосов
/ 09 июля 2010

Подробная документация по команде группы имеется на их сайте .

Здесь есть несколько примеров использования библиотек PHP здесь .

Если ваш набор данных действительно большой, вам, возможно, придется взглянуть на работающий map-less, чтобы "предварительно сгруппировать" эти данные.

...