HHVM MongoDb聚合似乎不起作用

时间:2016-01-29 09:54:48

标签: php mongodb hhvm

我在hhvm上运行了一些php脚本 我想在MongoDB 3.2中从我的集合中获取数值字段的最大值 这是我的聚合管道

    $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包含我的集合中的所有文档,并且没有$ group应用于它们 也许有人可以帮我这个?

2 个答案:

答案 0 :(得分:0)

聚合操作将返回集合中的所有文档,因为您要按键指定组的常量值,即字符串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);

答案 1 :(得分:0)

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

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