Как & quot; группировать по & quot; поле «считать» в Mongodb запрос построителя?

Я хочу классифицировать города по продуктам, которые они имеют.

У меня есть два документа: продукт и город. Продукт имеет свой идентификатор и ссылку на городской документ:

Product(id)             City

P1 ------------     Atlanta

P2 ------------     New York

P3 ------------     Michigan

P4 ------------     Atlanta

....

Хочу как результат запроса

[Atlant => 23, New York => 35, Michigan => 23, etc..]

Но я не смог получить результат.

Мой фактический код

   public function countBestUsers()
{
return $this->createQueryBuilder()
->select('id', 'city')
->distinct('city')
->getQuery()
->execute()
;
}

2

Решение

Вы можете попробовать с группой и уменьшить, этот пример работает для меня:

$count = $dm->createQueryBuilder()->hydrate(false)
->group(array('city.$id' => 1), array('value' => 0))
->reduce('function (curr,result) {
result.value++;
}')
->getQuery()
->execute()->toArray();

Если вам нужно больше примеров: http://docs.doctrine-project.org/projects/doctrine-mongodb-odm/en/latest/reference/query-builder-api.html#group-queries

Если вы будете сортировать по количествам, я рекомендую использовать совокупная структура:

$pipeline = array('$group' => array(
'_id' => '$city',
'value' => array('$sum' => 1)
)));

array_push($pipeline, array( '$sort' => array('value' => -1) ) );

$count = $dm->getDocumentCollection('YourBundle:Product')
->aggregate($pipeline)->toArray();
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]