在mongodb和php中获得多种条件的总和

时间:2015-01-02 08:30:15

标签: php mongodb mongodb-query aggregation-framework

我使用以下代码来获取具有1类型或特定值的所有价格,但它已经无效。

<?php
$m = new Mongo(); 
if (!$m)echo "Not Connected to database successfully";
$db =$m->mongo_project;
$collection = $db->prices;
$pipeline=array(
    array(
        '$match' => array(
            '_id' => array(
                '$type' =>1
            )
         )
    ),
    array(
        '$group' => array(
             '_id' => '',
             'count' => array(
                 '$sum' => '$price' 
             )
         )
    ),  
);
$out = $collection->aggregate($pipeline);
foreach ($out as $key=>$value) {
    if($key=='result') {
        $r=$value[0]['count'];
    }
}
echo $r;?>

1 个答案:

答案 0 :(得分:0)

我认为你的意思是一个包含字段&#34; type&#34;值为1.此处使用的$type运算符是一个特殊的MongoDB运算符,用于匹配某些BSON类型。在这种情况下,您要求匹配的_id字段是&#34; DOUBLE&#34;类型或BSON类型1。

纠正这个:

$pipeline=array(
    array(
        '$match' => array(
            'type' => 1
         )
    ),
    array(
        '$group' => array(
             '_id' => '',
             'total' => array(
                 '$sum' => '$price' 
             )
         )
    ),  
);

或者你可以得到&#34;总和&#34; &#34;价格&#34;每个&#34;类型&#34;通过将其作为$group操作中的_id传递而来的值。这样你就可以一目了然地看到一切:

$pipeline=array(
    array(
        '$group' => array(
             '_id' => '$type',
             'total' => array(
                 '$sum' => '$price' 
             )
         )
    ),  
);

在该上下文中,&#39; $ type`表示该字段的值。