与$ match无法在php mongo中工作的聚合管道

时间:2014-03-14 10:44:30

标签: php mongodb mongodb-query aggregation-framework

我想聚合具有匹配值的字段。

到目前为止,我有以下查询

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')
);

以上查询给出了聚合葡萄酒,但它不会过滤红葡萄酒。

注意:我在命令功能中运行它。

2 个答案:

答案 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的字段,而只有_idcount

您还有语法错误,$match处于错误的级别。

您可以将$match放在开头,也可以将该字段添加到汇总中的投影组字段列表中。

相关问题