- 分组之后希望按原字段进行排序,比如说时间戳,可以在分组数据中用$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;
}
网友评论