美文网首页
MongoDB聚合后组内排序

MongoDB聚合后组内排序

作者: 韩小禹 | 来源:发表于2020-02-19 12:11 被阅读0次
  • 分组之后希望按原字段进行排序,比如说时间戳,可以在分组数据中用$first显示原数据,然后在利用管道对该字段进行排序
/**
     * [getBucketData description]
     * @return [type] [description]
     */
    public function getBucketData($match,$type)
    {
        $table = 'bucket_quota';
        $collection = Yii::$app->mongodb->getCollection($table);

        if($type == 'alg'){
            $group = [
                '_id' => [
                    'dt'=>'$dt',
                    'alg'=>'$alg',
                    'display_playpro'=>'$display_playpro',      
                    'bk_avg_order'=>'$bk_avg_order',            
                    'bk_avg_income'=>'$bk_avg_income',          
                    'user_avg_order'=>'$user_avg_order',      
                    'user_avg_income'=>'$user_avg_income',      
                    'payuserpro'=>'$payuserpro',                
                ],
            ];
        }else{
            $group = [
                '_id' => [
                    'dt'=>'$dt',
                    'ordercount'=>'$ordercount',            
                    'income'=>'$income',                  
                    'usercount'=>'$usercount',             
                    'display_playpro'=>'$display_playpro',  
                    'payuserpro'=>'$payuserpro',           
                ],
            ];
            $group['_id'][$type] = '$'.$type;
        }
        $group['dt'] = ['$first'=>'$dt'];
        $data = $collection->aggregate([
            [
                '$match' => $match
            ],
            [
                '$group' => $group,
            ],
            [
                '$sort' => ["dt"=>-1],
            ],
        ]);

        foreach($data as $key => $value){
            if($type == 'alg'){
                $data[$key]['_id']['bk_avg_order'] = sprintf("%.2f",round($value['_id']['bk_avg_order'],2));
                $data[$key]['_id']['bk_avg_income'] = sprintf("%.2f",round($value['_id']['bk_avg_income'],2));
                $data[$key]['_id']['user_avg_income'] = sprintf("%.2f",round($value['_id']['user_avg_income'],2));
            }
            $data[$key]['_id']['payuserpro'] = sprintf("%.2f",round($value['_id']['payuserpro'],2) * 100);
            $data[$key]['_id']['display_playpro'] = sprintf("%.2f",round($value['_id']['display_playpro'],2) * 100);
        }
        return $data;
    }

相关文章

网友评论

      本文标题:MongoDB聚合后组内排序

      本文链接:https://www.haomeiwen.com/subject/lrfafhtx.html