HOWTO · MongoDB

MongoDB에 날짜 및 시간 저장

MongoDB에서 Date()와 new Date()의 차이, BSON Date 값 저장, ISODate()를 사용한 날짜 범위 조회와 날짜 정렬 방법을 알아봅니다.

이 페이지의 내용

MongoDB에 날짜를 저장하려면 보통 new Date()로 만든 JavaScript Date 값을 전달합니다. mongosh에서 new 없이 Date()를 호출하면 문자열이 반환되며, 문서에 저장할 날짜 값이 만들어지지 않습니다. 이 가이드에서는 두 방식의 차이와 ISODate()를 사용한 날짜 범위 조회, 날짜순 정렬 및 문제 해결을 살펴봅니다.

MongoDB에서 Date()와 new Date() 사용하기

Date()는 현재 날짜와 시간을 문자열로 반환합니다. MongoDB가 BSON Date로 저장할 수 있는 JavaScript Date 값이 필요하면 new Date()를 사용하세요. 특정 시각을 만들려면 Z와 같은 명시적인 UTC 표시가 포함된 ISO 8601 타임스탬프를 전달합니다.

다음 예제를 실행하세요.

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

console.log(new Date("2024-06-01T12:00:00Z").toISOString());
2024-06-01T12:00:00.000Z

이 JavaScript 예제는 날짜 값 생성만 보여줍니다. MongoDB 작업에는 mongosh 세션이 필요합니다. 삽입이나 업데이트에서는 다음과 같이 값을 직접 사용합니다. db.products.insertOne({ item: "apple", dateAdded: new Date() }). 문서의 dateAdded에는 BSON Date 값이 저장되며, Date()가 반환하는 문자열이 저장되는 것은 아닙니다.

MongoDB에서 날짜 조회 및 정렬하기

sort()를 사용하면 날짜 필드를 양방향으로 정렬할 수 있습니다. 오름차순(이른 날짜부터)은 1, 내림차순(늦은 날짜부터)은 -1을 사용합니다. 예를 들어 db.posts.find().sort({ date: 1 })은 posts의 date 필드를 가장 이른 날짜부터 정렬하고, db.posts.find().sort({ date: -1 })은 반대 순서로 반환합니다. 이 쿼리에서는 필드 값이 일관되게 날짜로 저장되어 있다고 가정합니다.

ISO 형식처럼 보이는 문자열도 여전히 문자열입니다. 필드에 문자열과 BSON Date 값이 함께 있으면 MongoDB는 BSON 타입 순서에 따라 먼저 정렬한 다음 각 타입 안에서 값 순으로 정렬합니다. 따라서 모든 문서가 시간순으로 정렬되지 않을 수 있습니다. 날짜를 안정적으로 정렬하려면 필드 값을 BSON Date로 통일하고 쿼리에서 동일한 필드 이름과 정렬 방향을 사용하세요.

결과가 예상한 순서와 다르면 쿼리 대상 컬렉션이 맞는지, 정렬 키가 저장된 필드 이름과 일치하는지, 값의 BSON Date 타입이 일관적인지, 정렬 방향이 의도한 1 또는 -1인지 확인하세요. 컬렉션에는 문서가 들어 있고, 문서에는 날짜 필드가 들어 있습니다.

MongoDB 날짜 쿼리에서 ISODate() 사용하기

ISODate()는 셸 예제에서 날짜 값을 표현하는 mongosh 도우미이며, 별도의 BSON 타입은 아닙니다. 쿼리에서 날짜 범위를 지정할 때 사용할 수 있습니다. 다음 예제는 AdmissionDate가 2013년 6월 7일 UTC 자정(포함)부터 6월 8일 UTC 자정(제외)까지인 문서를 찾습니다.

db.students.find({ AdmissionDate: { $gte: ISODate("2013-06-07T00:00:00Z"), $lt: ISODate("2013-06-08T00:00:00Z") } })

$gte는 시작 시각을 포함하고 $lt는 끝 시각을 제외하므로, 인접한 일별 범위가 같은 시각을 중복해서 포함하지 않습니다. 쿼리 필드 이름과 저장된 BSON Date 필드 이름을 일치시키세요.

이 mongosh 코드는 설명을 위한 예제이며 실제 실행 결과를 제시하는 것은 아닙니다. 이름이 지정된 컬렉션과 필드가 있는 데이터베이스에 연결된 MongoDB 셸에서 실행하세요. find() 결과는 해당 데이터에 따라 달라집니다.

결론

날짜 값을 저장하려면 new Date()를 사용하고, Date()는 문자열을 반환한다는 점을 기억하세요. mongosh에서 ISODate()로 날짜 범위를 지정해 조회하고, 타입이 일관된 BSON Date 값은 sort()로 정렬하세요. 정렬 결과가 예상과 다르면 필드 이름, BSON 타입, 정렬 방향을 확인하세요.