2016-09-06 4 views
1

로 집계 프로젝트를 몽고 나는 다음과 같은 몽고 집계 funnction 있습니다PHP는 PHP에서 날짜 필드

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, 평균 및 레코드 수를 얻을 수있다 $i$i 의해 주어진 어레이 ($valRefId)하고 그룹에 $year, $month, $day.

결과적으로 "_id"를 갖게되었습니다. "날짜", "maxValue", "minValue", "Gemiddelde", "Aantal".

내 질문이 지금은 문자열 형식이 아닌 날짜 형식 (또는 타임 스탬프 형식)으로 "날짜"필드를 반환 할 수 있습니까?

답변

2

예 가능합니다. 당신은 다음과 같이 $first 누적를 사용하여 $group 파이프 라인에있는 날짜 필드를 반환 할 수 있습니다

$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, 
     ) 
    ) 
); 
+0

지금은 기능에 의해 그룹에있는 첫 번째 항목을 얻을. 나는 이것으로 작업 할 수 있다고 생각한다. 그러나 '날짜'필드의 문자열 유형을 날짜 유형으로 변경할 수 있습니까? –

+0

집계 파이프 라인에서 문자열을 날짜로 변환 할 방법이 없지만 날짜를 문자열로 변환 할 수 있습니다. – chridam