MongoDB聚合后组内排序

2020-02-19  本文已影响0人  韩小禹
/**
     * [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;
    }
上一篇 下一篇

猜你喜欢

热点阅读