如何在 mongodb querybuilder 中 "group by" 字段 "count"?
How to "group by" field "count" in mongodb querybuilder?
我想根据城市所拥有的产品对城市进行分类。
我有两个文件:产品和城市。该产品有其 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()
;
}
你可以尝试使用 group 和 reduce,这个例子对我有用:
$count = $dm->createQueryBuilder()->hydrate(false)
->group(array('city.$id' => 1), array('value' => 0))
->reduce('function (curr,result) {
result.value++;
}')
->getQuery()
->execute()->toArray();
如果按数量排序,我推荐使用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();
我想根据城市所拥有的产品对城市进行分类。
我有两个文件:产品和城市。该产品有其 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()
;
}
你可以尝试使用 group 和 reduce,这个例子对我有用:
$count = $dm->createQueryBuilder()->hydrate(false)
->group(array('city.$id' => 1), array('value' => 0))
->reduce('function (curr,result) {
result.value++;
}')
->getQuery()
->execute()->toArray();
如果按数量排序,我推荐使用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();