2016-04-25 16 views
3

Für den Anfang muss ich sagen, ich bin neu zu mongo (3.2). Ich benutze mongo-odm-aggregation-bundle für PHP-Framework Symfony (2.8.4). Ich möchte die Summe einiger Felder erhalten, die nach Daten begrenzt sind. Bisher konnte ich Summen für alle Datensätze erhalten:Symfony mongo-odm-Aggregation-Bündel Summen

$expr = new \Solution\MongoAggregation\Pipeline\Operators\Expr; 
     $aq = $this->manager->getCollection('AppBundle:UserDaySums')->createAggregateQuery()->group([ 
          '_id' => 'client.$id', 
          'total' => $expr->sum('$aSum'), 
         ]) 

Nun würde ich diese Abfrage durch datefrom, dateTo und userId beschränken möchten. Ich bin mir nicht sicher, wie es geht. Ich weiß, ich sollte wahrscheinlich Match-Funktion verwenden, aber ich weiß nicht wie. Oder gibt es eine bessere Lösung?

Danke für die Antworten!

KP

Antwort

0

Ja, Sie können die Match-Funktion verwenden. Zum Beispiel der folgenden vorausgesetzt, dass Sie die Datumsvariablen für die Verwendung in der Abfrage haben:

$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(); 
+0

Danke, das ist was ich brauchte. Ich änderte es gerade zu '$ aq -> Übereinstimmung ([ 'Datum' => $ expr-> gte ($ dateFrom), 'Datum' => $ expr-> lte ($ dateTo), 'Benutzer. $ id '=> $ expr-> in ($ userMongoIds) ]) ' –

0

In meinem Fall match() war auf einem MongoId Objekt etwas schwierig.

Das hat bei mir nicht funktioniert:

$userMongoId = "57321c7a2977f8de306ef648"; 
$aq ->match([ 'user.$id' => $expr->eq($userMongoId) ]) 

Das funktionierte:

$aq ->match([ 'user' => new \MongoId($userMongoId) ]) 

Getestet auf Symfony 3 mit dem SolutionMongoAggregationBundle, MongoDB Version 3.2.6.