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]);
谁能指出我的错误,尝试使用 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]);