如何"分组"字段" count"在mongodb querybuilder?

时间:2016-11-22 15:58:11

标签: php mongodb symfony doctrine-odm odm

我想用他们拥有的产品对城市进行分类。

我有两个文件:产品和城市。该产品具有其ID和对城市文档的引用:

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()
            ;
    }

1 个答案:

答案 0 :(得分:3)

您可以尝试使用group和reduce,此示例适用于我:

$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

如果您要按数量对其进行排序,建议您使用aggregate Framework

$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();