[英]php mongo aggregate project to date field
在php中,我具有以下mongo聚合函数:
array(
array(
'$match' => array(
"i" => array('$in' => $valRefId),
"date" => array('$gt'=> $mongotimestart , '$lte'=> $mongotimeend),
),
),
array(
'$project' => array(
"i" => '$i',
"v" => '$v',
"datumpje" => array('$add'=>array('$date',$timezone_date)),
"year" => array('$year' =>array('$add'=>array('$date',$timezone_date))),
"month" => array('$month'=>array('$add'=>array('$date',$timezone_date))),
"day" => array('$dayOfMonth'=>array('$add'=>array('$date',$timezone_date))),
"hour" => array('$hour'=> array('$add'=>array('$date',$timezone_date))),
)
),
array(
'$group' => array(
'_id' => array(
"valRefId" => '$i',
"year" => '$year',
"month" => '$month',
"day" => '$day',
"hour" => '$hour',
),
"MaxValue" => array('$max' => '$v'),
"MinValue" => array('$min' => '$v'),
"Gemiddelde" => array('$avg' => '$v'),
"Aantal" => array('$sum' => 1),
)
),
array(
'$sort' => array(
"_id.valRefId" => 1,
"_id.year" => 1,
"_id.month" => 1,
"_id.day" => 1,
"_id.hour" => 1,
)
),
array(
'$project' => array(
"date" => array(
'$concat' => array(array('$substr' => array('$_id.year',0,4)),
"-",
array('$substr' => array('$_id.month',0,2)),
"-",
array('$substr' => array('$_id.day',0,2)),
" ",
array('$substr' => array('$_id.hour',0,2)),
":00:00",
),
),
"MaxValue" => '$MaxValue',
"MinValue" => '$MinValue',
"Gemiddelde" => '$Gemiddelde',
"Aantal" => '$Aantal',
)
),
);
该函数的含义是获取时间窗口中的maxValue,MinValue,Average和记录数,其中$i
在给定数组( $valRefId
)中,然后按$i
, $year
, $month
$year
, $month
, $day
和$hour
分组。 $hour
。
结果,我现在有了“ _id”。 “日期”,“ maxValue”,“ minValue”,“ Gemiddelde”,“ Aantal”。
我的问题是,现在是否可以不以字符串类型而是以日期类型(或时间戳类型)返回“日期”字段?
是的,有可能。 您可以使用$first
累加器在$group
管道中返回date字段,如下所示:
$pipeline = array(
array(
'$match' => array(
"i" => array('$in' => $valRefId),
"date" => array('$gt'=> $mongotimestart , '$lte'=> $mongotimeend),
),
),
array(
'$project' => array(
"i" => 1,
"v" => 1,
"datumpje" => array('$add'=>array('$date',$timezone_date)),
"year" => array('$year' =>array('$add'=>array('$date',$timezone_date))),
"month" => array('$month'=>array('$add'=>array('$date',$timezone_date))),
"day" => array('$dayOfMonth'=>array('$add'=>array('$date',$timezone_date))),
"hour" => array('$hour'=> array('$add'=>array('$date',$timezone_date))),
)
),
array(
'$group' => array(
'_id' => array(
"valRefId" => '$i',
"year" => '$year',
"month" => '$month',
"day" => '$day',
"hour" => '$hour',
),
"date" => array('$first' => '$datumpje'),
"MaxValue" => array('$max' => '$v'),
"MaxValue" => array('$max' => '$v'),
"MinValue" => array('$min' => '$v'),
"Gemiddelde" => array('$avg' => '$v'),
"Aantal" => array('$sum' => 1),
)
),
array(
'$sort' => array(
"_id.valRefId" => 1,
"_id.year" => 1,
"_id.month" => 1,
"_id.day" => 1,
"_id.hour" => 1,
)
)
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.