HHVM MongoDb 聚合似乎不起作用

HHVM MongoDb aggregation seems like it doesn't work

我在 hhvm 上有一些 php 脚本 运行 我正在尝试从 MongoDB 3.2 中的 collection 获取数字字段的最大值 这是我的聚合管道

    $mongo = new \MongoDB\Driver\Manager(MONGODB_HOST);
    $myCollection = new \MongoDB\Collection($mongo, "mydb.mycollection");

    $pipeline = [
            [
                '$group' => [
                    '_id' => 'group_field',
                    'slId' => ['$max' => '$saleId']
                ],
            ]
        ];

    $doc = $myCollection->aggregate($pipeline);

此管道在 mongo shell 中完美运行,但来自 php $doc 包含我的 collection 中的所有文档,并且没有 $group 应用于它们 也许有人可以帮我解决这个问题?

聚合操作正在返回您集合中的所有文档,因为您为分组键指定了一个常量值,字符串 group_field。您需要在 _id 键值中使用 $ 字符作为组字段的前缀。因此,例如,如果您的按键分组是 name 字段,您可以将聚合管道重写为

$mongo = new \MongoDB\Driver\Manager(MONGODB_HOST);
$myCollection = new \MongoDB\Collection($mongo, "mydb.mycollection");
$group_field = '$name';
$pipeline = [
        [
            '$group' => [
                '_id' => $group_field,
                'slId' => ['$max' => '$saleId']
            ],
        ]
    ];

$doc = $myCollection->aggregate($pipeline);

感谢 chridam 在这里的回答。 我不知道,但也许这是某种魔法 所以,chridam 的回答帮助了我 $group,所以最后我的结果按 $group_field 分组。但是 slid 仍然不存在。所以,这就是我所做的并且它有所帮助:

$f = '$group_field';
$sl = ['$max' => '$saleId'];
$pipeline = array(
    array(
        '$group' => array(
            '_id'  => $f,
            'slId' => $sl
        ),
    )
);