我在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应用于它们 也许有人可以帮我这个?
答案 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
),
)
);