Symfony如何mongo-odm-aggregation-bundle

时间:2017-02-22 18:12:16

标签: mongodb symfony odm

我很困惑地问这个问题,但我无法找到解决问题的方法。 我使用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'它不起作用。那怎么办?我需要你的帮助。

0 个答案:

没有答案