MongoDB에서 날짜(Date) 값을 원하는 형식의 문자열로 변환하려면 집계 파이프라인의 $dateToString 연산자를 사용하면 됩니다. 이 연산자는 ISODate 형식으로 저장된 날짜를 'YYYY-MM-DD HH-mm'처럼 사용자가 지정한 패턴의 문자열로 손쉽게 바꿔 줍니다.
1. 샘플 컬렉션 생성하기
먼저 날짜 필드(DueDate)를 포함한 문서들로 컬렉션을 생성해 보겠습니다.
> db.demo480.insertOne({id:1,"DueDate":new ISODate("2020-01-10")});{
"acknowledged" : true,
"insertedId" : ObjectId("5e821056b0f3fa88e2279098")
}
> db.demo480.insertOne({id:1,"DueDate":new ISODate("2017-12-21")});{
"acknowledged" : true,
"insertedId" : ObjectId("5e821062b0f3fa88e2279099")
}
> db.demo480.insertOne({id:1,"DueDate":new ISODate("2019-10-12")});{
"acknowledged" : true,
"insertedId" : ObjectId("5e82106ab0f3fa88e227909a")
}
> db.demo480.insertOne({id:1,"DueDate":new ISODate("2019-12-01")});{
"acknowledged" : true,
"insertedId" : ObjectId("5e821078b0f3fa88e227909b")
}2. 저장된 문서 확인하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 조회할 수 있습니다.
> db.demo480.find();
위 명령을 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5e821056b0f3fa88e2279098"), "id" : 1, "DueDate" : ISODate("2020-01-10T00:00:00Z") }
{ "_id" : ObjectId("5e821062b0f3fa88e2279099"), "id" : 1, "DueDate" : ISODate("2017-12-21T00:00:00Z") }
{ "_id" : ObjectId("5e82106ab0f3fa88e227909a"), "id" : 1, "DueDate" : ISODate("2019-10-12T00:00:00Z") }
{ "_id" : ObjectId("5e821078b0f3fa88e227909b"), "id" : 1, "DueDate" : ISODate("2019-12-01T00:00:00Z") }3. $dateToString으로 날짜 형식 변환하기
이제 aggregate()와 함께 $match, $sort, $project 단계를 조합하여 날짜 값을 원하는 형식으로 변환해 보겠습니다.
> db.demo480.aggregate([
... { "$match": { "id" : 1 } },
... { "$sort": { "DueDate": -1 } },
... {
... "$project": {
... "_id": 0,
... "DueDate": {
... "$dateToString": {
... "format": "%Y-%m-%d %H-%M",
... "date": "$DueDate"
... }
... }
... }
... }
... ])
쿼리 설명
- $match: id가 1인 문서만 필터링합니다.
- $sort: DueDate 기준으로 내림차순(-1) 정렬합니다.
- $project: _id 필드는 제외하고, DueDate만 $dateToString으로 변환하여 출력합니다.
형식 지정자(format specifier)
- %Y — 연도(4자리)
- %m — 월(2자리)
- %d — 일(2자리)
- %H — 시(24시간제)
- %M — 분
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{ "DueDate" : "2020-01-10 00-00" }
{ "DueDate" : "2019-12-01 00-00" }
{ "DueDate" : "2019-10-12 00-00" }
{ "DueDate" : "2017-12-21 00-00" }이처럼 MongoDB 셸에서는 $dateToString 연산자 하나만으로 ISODate 값을 다양한 문자열 형식으로 자유롭게 변환할 수 있습니다. 필요에 따라 format 문자열의 지정자를 조합하여 원하는 출력 형식을 만들어 보세요.