我想聚合具有匹配值的字段。
到目前为止,我有以下查询
array(
'aggregate' => wines,
'pipeline'=>
array(
array(
'$group' => array(
'_id' => array('name' => '$name', "winery" => $winery )
)
),
array(
'$group' => array(
'_id' => $_id.winery,
'count' => array('$sum' => 1)
)
)
),
'$match' => array('wine_type'=>'red wine')
);
以上查询给出了聚合葡萄酒,但它不会过滤红葡萄酒。
注意:我在命令功能中运行它。
答案 0 :(得分:4)
在你的问题中不是很清楚,但你似乎在错误的地方有$匹配:
array(
'aggregate' => wines,
'pipeline'=>
array(
array(
'$match' => array('wine_type'=>'red wine')
),
array(
'$group' => array(
'_id' => array('name' => '$name', "winery" => $winery )
)
),
array(
'$group' => array(
'_id' => $_id.winery,
count' => array('$sum' => 1)
)
)
)
)
);
您应该习惯聚合的标准调用而不是runCommand
形式。将来的版本将返回结果的光标。
答案 1 :(得分:0)
原因是由于多个组,该字段在聚合结束时不存在。这是因为一个管道的结果传递给另一个管道,所以实际上您只搜索wine_type
的字段,而只有_id
和count
。
您还有语法错误,$match
处于错误的级别。
您可以将$match
放在开头,也可以将该字段添加到汇总中的投影组字段列表中。