如何使用 doctrine/mongodb 在 symfony 中构建聚合查询?

How to build an Aggregation query in symfony with doctrine/mongodb?

我开始使用 Symfony 和 doctrine/mongodb。我正在尝试执行聚合查询,但我得到

Attempted to call an undefined method named "createAggregationBuilder" of class "Doctrine\ODM\MongoDB\DocumentManager"

像这样:

<?php

namespace AppBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;

class TestController extends Controller
{
  /**
   * @Route("/test", name="test")
   */
  public function testAction(Request $request) {
    $builder = $this->get('doctrine_mongodb')
       ->getManager()
       ->createAggregationQuery('AppBundle:Test');

    var_dump($builder);
  }
}

我现在很沮丧,因为每个文档或 Whosebug 问题和答案都以

开头
$dm->createAggregationQuery();

我不知道 $dm 在这种情况下代表什么。

非常感谢您的帮助。


更新

我查看了 doctrine/mongodb-odm 源代码,发现我的版本缺少 DocumentRepository.phpDocumentManager.php 中的 createAggregationBuilder 函数文件(均位于 /vendor/doctrine/mongodb-odm/lib/Doctrine/MongoDB 文件夹中。

怎么会这样?

我的意思是作曲家说我有 1.1.6 版,这是最新版本,在 git 存储库上我可以清楚地看到这些方法 (DocumentRepository.php, DocumentManager.php)

愚蠢的我。问题是我使用的是 doctrine/mongodb-odm 的 1.1.6 版本,而 Aggregation Builder 仅在 1.2 版本中可用。直到(对于任何像我一样盲目的人),只需使用 "dev-master" 版本。 在您的 composer.json 中,将 doctrine/mongodb-odm 行修改为:

"require": {
    "doctrine/mongodb-odm": "dev-master"
}

然后 运行 composer update doctrine/mongodb-odm.