2017-05-09 189 views
0

有人可以指出我的錯誤,試圖使用userId字段來總結一個字段(金額)嗎? https://fatfreeframework.com/3.6/mongo-mapperMongo mapper使用聚合框架

這是我的代碼,這是返回與userId匹配的所有文件,但不是總和。

$f3 = \Base::instance(); 
$mapper = new \DB\Mongo\Mapper($f3->get('MongoDB'),'transactions'); 
     $filter = array('userId'=>'452'); 
     $options = array(
        array(
        'group' => array(
         '_id' => array('userId' => $userId), 
         'amount' => array('$sum' => 'amount') 
        ) 
       ) 
     );   
     $data = $mapper->find($filter, $options); 

     echo "<pre>"; 
     print_r($data); 
     exit; 

回答

1

mongo映射器使用db.collection.group()方法而不是聚合框架。因此,您將無法呼叫蓄電池,如$sum

相反,你必須使用以下語法:

$group = [ 
    'keys'=>['userId'=>1], 
    'initial'=>['sum'=>0], 
    'reduce'=>'function(obj,result){result.sum+=obj.amount;}', 
    'finalize'=>'function(result){}', 
); 
$data = $mapper->find($filter, ['group'=>$group]); 
+0

請讓我知道什麼是由'「用戶id」 => 1'是什麼意思? –

+0

它是一個javascript代碼或Mongo代碼'function(obj,result){...}'? –

+0

'$ group ['keys']'應該是一個表示鍵列表的數組。該數組的值不重要。在這個例子中,它可以是'['userId'=> TRUE]','['userId'=> NULL]或'['userId'=>'whatever']'。 – xfra35