聚合管道与$match不工作在php mongo


Aggregate pipeline with $match not working in php mongo

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

到目前为止,我有以下查询
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的字段,而只有_idcount

还有一个语法错误,$match在错误的级别。

您可以将$match放在开头,或者您可以将该字段添加到聚合中的投影组字段列表中。