2016-12-02 172 views
0

想要獲取該記錄的字段speed及其對應的其他字段的最大值。Symfony2 Mongodb聚合 - 獲取字段的最大值

有這樣的MongoDB查詢:

db.Neo.aggregate({ 
    $group: { 
     _id: '$name', 
     date: { $first: '$date' }, 
     neo_reference_id: { $first: '$neo_reference_id' }, 
     name: { $first: '$name' }, 
     speed: { 
      $max: "$speed" 
     }, 
     is_potentially_hazardous_asteroid: { $first: '$is_potentially_hazardous_asteroid' }   
    }   
}); 

現在,因爲我使用的Symfony2和蒙戈-ODM-聚集束,想要得到此查詢執行:

public function neofastestAction() { 

    $expr = new \Solution\MongoAggregation\Pipeline\Operators\Expr; 
    $aq = $this->get('doctrine_mongodb.odm.default_aggregation_query')->getCollection('NeoNasaBundle:Neo')->createAggregateQuery(); 

    $result = $aq->group(['_id'=>'$name' ]) 
     ->getQuery()->aggregate()->toArray();   
    $serializer = $this->get('jms_serializer'); 
    $response = $serializer->serialize($result,'json'); 
    return new Response($response); 
} 

此執行,但只打印_id。如何從上面構建我的MondoDB查詢到Symfony2 mongo-odm-aggregation-bundle(https://packagist.org/packages/solution/mongo-odm-aggregation-bundle)並獲取最後一行?它應該是speed的最高值,因此是最快的小行星。

謝謝。

回答

0

該做的:

public function neofastestAction() { 

     $expr = new \Solution\MongoAggregation\Pipeline\Operators\Expr; 
     $aq = $this->get('doctrine_mongodb.odm.default_aggregation_query')->getCollection('NeoNasaBundle:Neo')->createAggregateQuery(); 

     $result = $aq->group(['_id'=>'$name', 'date'=> $expr->first('$date'), 'neo_reference_id'=> $expr->first('$neo_reference_id'), 'name'=> $expr->first('$name'), 'speed'=> $expr->max('$speed'),'is_potentially_hazardous_asteroid'=> $expr->first('$is_potentially_hazardous_asteroid') ]) 
      ->sort(['speed' => -1])->limit(1)->getQuery()->aggregate()->toArray(); 


     $serializer = $this->get('jms_serializer'); 
     $response = $serializer->serialize($result,'json'); 

     return new Response($response); 
    }