我很困惑地问这个问题,但我无法找到解决问题的方法。 我使用mongo-odm-agregation-bundle对我的数据执行聚合。
我不知道如何正确使用此捆绑包,文档不够明确,结果不是我所期望的。
因此,在mongoDB中,我的代码是聚合的:
id: { Epreuve:"$EPREUVE", month: { $month: "$DATE" },
day: { $dayOfMonth: "$DATE" }, year: { $year: "$DATE" }},
total: { $sum: "$SCORE" },
nbmots: {$sum: "$NBMOTS"},
moymots: {$avg : "$NBMOTS"},
moytemps:{$avg: "$CHRONOS"},
position: { $sum: 1 },
结果是:
{
"_id" : {
"Epreuve" : "Verbe",
"month" : NumberInt(2),
"day" : NumberInt(21),
"year" : NumberInt(2017)
},
"total" : NumberLong(430),
"nbmots" : NumberLong(16),
"moymots" : 16.0,
"moytemps" : 147.24,
"position" : 1.0
}
在Symfony中,我使用此示例进行测试:
$expr = new \Solution\MongoAggregation\Pipeline\Operators\Expr;
$aq = $this->get('doctrine_mongodb.odm.default_aggregation_query')->getCollection('PortailBundle:DataScoreMotsMeles')->createAggregateQuery();
$result = $aq->match(['SESSION'=>$currentSession])
->group(['_id' => [ 'Epreuve' => "EPREUVE", ],
'Score' => $expr->sum("SCORE"),
'nbMots'=> $expr->sum("NBMOTS"),
'moyMots'=> $expr->avg("NBMOTS"),
'moyTemps'=> $expr->avg("CHRONOS"),
'count' => $expr->sum(1)])
->sort(['count' => -1])
->limit(10)
->getQuery()
->aggregate()
->toArray();
结果是:
Array ( [0] => Array ( [_id] => Array ( [Epreuve] => **EPREUVE** ) [Score] => **0** [nbMots] => **0** [moyMots] => [moyTemps] => [count] => 3 ) )
问题是结果每次都是0。
这是正常的,因为我使用:
$expr->sum("NBMOTS")
而不是:
$expr->sum('$NBMOTS')
但如果我使用' $ NBMOTS'它不起作用。那怎么办?我需要你的帮助。