Mongo映射器使用聚合框架

时间:2017-05-09 05:52:08

标签: php fat-free-framework

有人可以指出我的错误,尝试使用userId字段对字段(金额)求和吗? https://fatfreeframework.com/3.6/mongo-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 个答案:

答案 0 :(得分: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]);