我想聚合一个具有匹配值的字段。
到目前为止,我有以下查询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')
);
上面的查询给出了聚合的葡萄酒,但它没有过滤红葡萄酒。
注意:我在命令函数中运行这个。
你的问题不是很清楚,但你似乎在错误的地方有$match:
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
形式。以后的版本将为结果返回一个游标。
原因是由于多个组的原因,该字段在聚合结束时不存在。这是因为一个管道的结果传递给了另一个管道,所以实际上您正在搜索wine_type
的字段,而只有_id
和count
。
还有一个语法错误,$match
在错误的级别。
您可以将$match
放在开头,或者您可以将该字段添加到聚合中的投影组字段列表中。