Mongo 映射器使用聚合框架

Mongo mapper use aggregation 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;

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