首先,我不得不说我是mongo(3.2)的新手。我正在使用mongo-odm-aggregation-bundle用于php框架Symfony(2.8.4)。我希望获得一些受日期限制的字段的总和。 到目前为止,我设法获得所有记录的总和:
$expr = new \Solution\MongoAggregation\Pipeline\Operators\Expr;
$aq = $this->manager->getCollection('AppBundle:UserDaySums')->createAggregateQuery()->group([
'_id' => 'client.$id',
'total' => $expr->sum('$aSum'),
])
现在,我想通过dateFrom,dateTo和userId限制此查询。我不确定,怎么做。我知道,我应该使用匹配功能,但我不知道如何。或者有更好的解决方案吗?
感谢您的回复!
KP
答案 0 :(得分:0)
是的,您可以使用匹配功能。例如,以下假设您具有要在查询中使用的日期变量:
$expr = new \Solution\MongoAggregation\Pipeline\Operators\Expr;
$aq = $this->manager->getCollection('AppBundle:UserDaySums')->createAggregateQuery();
$dateFrom = new MongoDate(strtotime('-2 days'));
$dateTo = new MongoDate();
$userId = 'Xsgy62js0lb';
$result = $aq->match(['dateFrom'=>$dateFrom, 'dateTo'=>$dateTo, 'userId'=>$userId ])
->group(['_id'=>'client.$id', 'total'=>$expr->sum('$aSum') ])
->getQuery()->aggregate();
答案 1 :(得分:0)
就我而言,match()在MongoId对象上有些棘手。
这对我不起作用:
$userMongoId = "57321c7a2977f8de306ef648";
$aq ->match([ 'user.$id' => $expr->eq($userMongoId) ])
这有效:
$aq ->match([ 'user' => new \MongoId($userMongoId) ])
使用SolutionMongoAggregationBundle,MongoDB版本3.2.6在Symfony 3上测试。