글
API로 데이터를 받았는데 timestamp나 일반적인 날짜/시간 포맷이 아닌 경우가 있다.
whois에서 제공하는 도메인 조회 api의 경우 날짜 포맷이 YYYY. mm. dd. 형태로 되어있다.
나중에 날짜/시간을 읽어 분석하는 서비스를 제공해야할 경우 Mongo DB가 아래와 같이 읽을 수 없어 곤란한 상황이 올 수 있다.
이러한 경우 Aggregate의 $dateFromString을 사용하여 사용자 포맷을 정해주면 읽어들일 수 있다.
https://docs.mongodb.com/manual/reference/operator/aggregation/dateFromString/
{ $dateFromString: { dateString: <dateStringExpression>, format: <formatStringExpression>, timezone: <tzExpression>, onError: <onErrorExpression>, onNull: <onNullExpression> } }
dateString : 변환할 날짜/시간 데이터 (필수)
format : 변환할 날짜/시간 포맷 (옵션)
timezone : 날짜/시간에 적용할 시간대 (옵션)
onError/onNull : 이벤트 발생 시 출력할 결과 (옵션)
여기서 예제는 앞서 말한 whois open api의 날짜 포맷인 YYYY. mm. dd. 로 한다.
db.dates.aggregate( [ { $project: { date: { $dateFromString: { dateString: '$date', format: '%Y. %m. %d.' } } } } ] )
$date는 날짜/시간 데이터를 가지고 있는 column명이다.
format은 api에서 제공하는 날짜/시간의 포맷을 넣었다.
위의 명령어를 mongo console에 적고 누르면 다음과 같이 결과가 출력된다.
성공적으로 변환되어 출력된 것을 볼 수 있다.
이제 위 명령어에 명령어를 덧붙여 collection에 적용되도록 한다.
적용을 하기 위해서는 $out을 사용한다.
https://docs.mongodb.com/master/reference/operator/aggregation/out/
*** $out의 collection은 위 명령어와 같은 collection을 쓸 경우 date를 제외한 모든 데이터 날라가므로 새로운 collection에 저장하도록 합시다. (테스트한다고 직접 겪어봄. 다 날림)
db.dates.aggregate( [ { $project: { date: { $dateFromString: { dateString: '$date', format: '%Y. %m. %d.' } } },
$out: { 'outputCollection' }
} ] )
이후 outputCollection을 확인해보면 console에서 확인한 결과값이 저장되어 있으므로 이후 update를 통해 데이터를 갱신하도록 한다.
'MongoDB' 카테고리의 다른 글
하나의 스테이지에서 여러 개의 파이프라인을 작성할 수 있게 해주는 $facet (1) | 2018.09.10 |
---|
RECENT COMMENT