Computer >> 컴퓨터 >  >> 프로그래밍 >> MongoDB

MongoDB ISODate에서 연도, 월, 일 등 날짜 정보 추출하는 방법

MongoDB ISODate란?

몽고 셸(mongo shell)은 날짜를 문자열 또는 Date 객체 형태로 반환하는 다양한 메서드를 제공합니다. 그중 ISODate() 생성자는 ISODate() 래퍼를 사용해 Date 객체를 반환하며, MongoDB에서 날짜 데이터를 다룰 때 가장 널리 사용되는 방식입니다.

샘플 데이터 생성

먼저 문서 하나를 담은 컬렉션을 생성해 보겠습니다.

> db.demo548.insertOne({"dueDate":new ISODate("2020-04-09 12:12:40")});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e8e30499e5f92834d7f05de")
}

find() 메서드를 사용해 컬렉션의 모든 문서를 조회합니다.

> db.demo548.find();

위 명령을 실행하면 다음과 같은 결과가 출력됩니다.

{ "_id" : ObjectId("5e8e30499e5f92834d7f05de"), "dueDate" : ISODate("2020-04-
09T12:12:40Z") }

ISODate에서 연도, 월, 일 등 추출하기

다음은 집계 파이프라인의 $project 단계와 날짜 연산자를 활용해 ISODate 값에서 연도, 월, 일, 시, 분, 초, 밀리초는 물론 연중 몇 번째 날(DayOfYear), 요일(DayOfWeek), 주차(Week)까지 한 번에 추출하는 쿼리입니다.

> db.demo548.aggregate( [ { $project: { Year: { $year: "$dueDate"
}, Month: { $month: "$dueDate" }, Day: { $dayOfMonth: "$dueDate"
}, Hour: { $hour: "$dueDate" }, Minutes: { $minute: "$dueDate" },
Seconds: { $second: "$dueDate" }, Milliseconds: { $millisecond: "$dueDate" },
DayOfYear: { $dayOfYear: "$dueDate" }, DayOfWeek: { $dayOfWeek: "$dueDate"
}, Week: { $week: "$dueDate" } } } ] ).pretty();

실행 결과는 다음과 같습니다.

{
    "_id" : ObjectId("5e8e30499e5f92834d7f05de"),
    "Year" : 2020,
    "Month" : 4,
    "Day" : 9,
    "Hour" : 12,
    "Minutes" : 12,
    "Seconds" : 40,
    "Milliseconds" : 0,
    "DayOfYear" : 100,
    "DayOfWeek" : 5,
    "Week" : 14
}

주요 날짜 집계 연산자 정리

  • $year : 연도 반환 (예: 2020)
  • $month : 월 반환 (1~12)
  • $dayOfMonth : 일 반환 (1~31)
  • $hour / $minute / $second / $millisecond : 시, 분, 초, 밀리초 반환
  • $dayOfYear : 해당 연도에서 몇 번째 날인지 반환 (1~366)
  • $dayOfWeek : 요일을 숫자로 반환 (1=일요일 ~ 7=토요일)
  • $week : 연중 몇 번째 주인지 반환 (0~53)

이처럼 MongoDB의 집계 연산자를 활용하면 별도의 애플리케이션 로직 없이도 저장된 날짜 값에서 원하는 시간 단위의 정보를 손쉽게 추출할 수 있습니다. 날짜별 통계 집계나 리포트 작성 시 특히 유용하게 활용할 수 있습니다.