首页 文章

Symfony2 Mongodb聚合 - 获取字段的最大值

提问于
浏览
0

想要获得该字段的最大值 speed 及其相应的其他字段 .

有这个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和mongo-odm-aggregation-bundle,所以想要执行这个查询:

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 的最高值,所以最快的小行星 .

谢谢 .

1 回答

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

相关问题