MongoDB에서 날짜 구성 요소(연·월·일)를 하나의 날짜로 변환하는 방법
MongoDB에서는 연(Year), 월(Month), 일(Day)이 각각 별도의 필드로 저장되어 있는 경우가 많습니다. 이렇게 분리된 날짜 구성 요소를 하나의 날짜 값으로 변환하려면 애그리게이션 파이프라인의 $dateFromParts 연산자와 $dateToString 연산자를 함께 사용하면 됩니다. 아래 예제를 통해 전체 과정을 단계별로 살펴보겠습니다.
1단계: 샘플 컬렉션 생성 및 도큐먼트 삽입
먼저 날짜 정보가 개별 필드로 저장된 도큐먼트를 포함하는 컬렉션을 생성합니다.
> db.demo386.insert(
... {
... details: { Month: 02, Day: 27, Year: 2020 }
... }
... );
WriteResult({ "nInserted" : 1 })
2단계: 컬렉션의 모든 도큐먼트 조회
find() 메서드를 사용해 저장된 데이터를 확인합니다.
> db.demo386.find();
위 명령을 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5e5bd9a222064be7ab44e7f7"), "details" : { "Month" : 2, "Day" : 27, "Year" : 2020 } }3단계: 날짜 구성 요소를 하나의 날짜로 변환
다음은 $project 단계에서 $dateFromParts로 개별 필드를 조합해 날짜 객체를 만들고, $dateToString으로 원하는 형식의 문자열로 변환하는 쿼리입니다.
> db.demo386.aggregate(
... {"$project":{
... "_id":0,
... "DueDate":{
... "$dateToString":{
... "format":"%m-%d-%Y",
... "date":{"$dateFromParts": {"year":"$details.Year","month":"$details.Month","day":"$details.Day"}}
... }
... }
... }}
... );
실행 결과는 다음과 같습니다.
{ "DueDate" : "02-27-2020" }주요 연산자 정리
$dateFromParts — year, month, day 등 개별 필드 값을 조합하여 하나의 날짜 객체를 생성합니다. 필요에 따라 시간대(timezone) 옵션도 함께 지정할 수 있습니다.
$dateToString — 날짜 객체를 지정한 포맷 문자열로 변환합니다. 예제에서 사용한 %m-%d-%Y는 각각 월, 일, 연도를 의미하며, 그 결과 "02-27-2020" 형식의 문자열이 출력됩니다.
이처럼 MongoDB의 애그리게이션 연산자를 활용하면 분리되어 저장된 날짜 정보를 손쉽게 하나의 날짜로 통합할 수 있으며, 이를 응용하면 다양한 날짜 형식 변환과 데이터 가공 작업도 효율적으로 처리할 수 있습니다.