티스토리 뷰

반응형

$dateToString 이란?

dateToString는 mongodb의 date object를 사용자가 지정한 포맷으로 변환시켜 주는 몽고디비 operator이다. aggregate 구문에서 $project와 함께 사용된다. 
 
 

dateToString 사용법

$project : {
      formattedDate : {$dateToString : { format : "xxxxxxx", date : "$value"}}
}
주로 위 포맷으로 aggregate project 구문 안에서 dateToString을 사용할 수 있으며, format 지정한 형식으로 date object인 $value 값을 사용자가 임의로 네이밍한 값인 formattedDate 값으로 뽑을 수 있다.
 
 
예를 들어, 아래의 도큐먼트 정보를 가질 때
{ "value" : ISODate("2014-01-07T08:15:39.736Z") } 

db.collection.aggregate([
     { $project: { formattedDate : { $dateToString: { format: "포맷", date: "$value" } } } }
   ])

를 실행할 때에 project 된 결괏값인 formattedDate
포맷%Y-%m-%d 라면  "2014-01-07" 이 되고
포맷%Y%m%d 라면 "20140107" 이고
포맷%m/%d/%Y 라면 "01/07/2014" 이 되는 것이다.
 
한마디로 date object의 정보에서 필요한 것만 뽑아서 원하는 형식으로 보여주는 것이 가능하다는 것이다.
 
 

포맷 지정자 classifier

Specifiers
Description
Possible Values
%d
Day of Month (2 digits, zero padded)
01-31
%G
Year in ISO 8601 format
0000-9999
%H
Hour (2 digits, zero padded, 24-hour clock)
00-23
%j
Day of year (3 digits, zero padded)
001-366
%L
Millisecond (3 digits, zero padded)
000-999
%m
Month (2 digits, zero padded)
01-12
%M
Minute (2 digits, zero padded)
00-59
%S
Second (2 digits, zero padded)
00-60
%w
Day of week (1-Sunday, 7-Saturday)
1-7
%u
Day of week number in ISO 8601 format (1-Monday, 7-Sunday)
1-7
%U
Week of year (2 digits, zero padded)
00-53
%V
Week of Year in ISO 8601 format
01-53
%Y
Year (4 digits, zero padded)
0000-9999
%z
The timezone offset from UTC.
+/-[hh][mm]
%Z
The minutes offset from UTC as a number. For example, if the timezone offset (+/-[hhmm]) was +0445, the minutes offset is +285.
+/-mmm
%%
Percent Character as a Literal
%

 
format, date 이외에도 timezone, onNull과 같은 옵션들도 있으니 추가 사항은 mongodb 공식 문서에서 확인할 수 있다.
 
 

예제

아래는 몽고디비 공식 도큐먼트에 나와있는 예제이다.
 

{
  "_id" : 1,
  "item" : "abc",
  "price" : 10,
  "quantity" : 2,
  "date" : ISODate("2014-01-01T08:15:39.736Z")
}

위와 같은 document를 가질 때
 

db.sales.aggregate(
   [
     {
       $project: {
          yearMonthDayUTC: { $dateToString: { format: "%Y-%m-%d", date: "$date" } },
          timewithOffsetNY: { $dateToString: { format: "%H:%M:%S:%L%z", date: "$date", timezone: "America/New_York"} },
          timewithOffset430: { $dateToString: { format: "%H:%M:%S:%L%z", date: "$date", timezone: "+04:30" } },
          minutesOffsetNY: { $dateToString: { format: "%Z", date: "$date", timezone: "America/New_York" } },
          minutesOffset430: { $dateToString: { format: "%Z", date: "$date", timezone: "+04:30" } }
       }
     }
   ]
)

위의 dateToString 포맷으로 project한 결괏값은 아래와 같다.

{
   "_id" : 1,
   "yearMonthDayUTC" : "2014-01-01",
   "timewithOffsetNY" : "03:15:39:736-0500",
   "timewithOffset430" : "12:45:39:736+0430",
   "minutesOffsetNY" : "-300",
   "minutesOffset430" : "270"
}

 
 
 
 
[참조]
https://www.mongodb.com/docs/manual/reference/operator/aggregation/dateToString/
 

반응형
반응형