Doctrine mongo组查询

时间:2012-11-09 14:53:00

标签: mongodb doctrine

我在使用doctrine mongo db实现groupBy时遇到问题。

我遵循了这两个指南:

http://cookbook.mongodb.org/patterns/unique_items_map_reduce/

http://docs.doctrine-project.org/projects/doctrine-mongodb-odm/en/latest/reference/query-builder-api.html

确切地说,我想制作这个组:"选择*来自字体,其中1个按家庭分组"

这是我的代码无效:

$queryBuilder = $this->createQueryBuilder();
$queryBuilder->group(array('family'), array('count' => 0));
$queryBuilder->reduce('function (obj, prev) { prev.count++; }');
$queryBuilder->sort($sort, $order);
return $queryBuilder;

提前致谢。

2 个答案:

答案 0 :(得分:1)

您可以尝试:

$queryBuilder = $this->createQueryBuilder();
$queryBuilder->group(array('family' => 1), array('count' => 0));
$queryBuilder->reduce('function (obj, prev) { prev.count += 1;}');
$queryBuilder->sort($sort, $order);
return $queryBuilder;

答案 1 :(得分:1)

聚合框架提供了一种处理记录并返回计算结果的简便方法。

例如,我们的文档就是这样。

class Example
{
/**
  * @MongoDB\Field(type="int")
  */
 protected $noExample;

 /**
  * @MongoDB\Field(type="string")
  */
 protected $libelle;


 /**
  * @MongoDB\Field(type="string")
  */
 protected $family;

}

在ExampleRepository中,我们需要创建此函数。

public function groupByFamily()
{

$qb = $this->createAggregationBuilder('Document\Example');


    $qb->group()
       ->field('id')
       ->expression('$family')
       ->field('noExample')
       ->first('$noExample')
       ->field('libelle')
       ->first('$libelle')
       ->field('family')
       ->first('$family')
       ->field('number_record')
       ->sum(1);

    $results = $qb->execute();
    return $results;
}

您可以read more