2016-12-02 6 views
0

このレコードのフィールドspeedとそれに対応する他のフィールドの最大値を取得したい。Symfony2 Mongodb集約 - フィールドの最大値を取得

このMongoDBのクエリを持っている:私はSymfony2のとモンゴ・ODM-凝集バンドルを使用しておりますので、今すぐ

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' }   
    }   
}); 

このクエリが実行取得したい:

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のみが印刷されます。 mondo-odm-aggregation-bundle(https://packagist.org/packages/solution/mongo-odm-aggregation-bundle)にSymfony2のMondoDBクエリを作成して最後の行を取得するにはどうすればよいですか?それは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); 
    } 
関連する問題