MongoDB에 날짜 및 시간 저장
이 기사에서는 날짜와 시간을 저장하는 가장 좋은 방법에 대해 설명합니다. Date()
메서드에 대해 자세히 설명합니다.
또한 날짜 쿼리를 사용하는 다양한 접근 방식에 대해 설명합니다. ISODate가 MongoDB에서 작동하지 않는 날짜 쿼리 문제는 코드 세그먼트에 대한 설명과 함께 논의될 것입니다.
Date()
메서드를 사용하여 MongoDB에 날짜 및 시간 저장
Date()
는 현재 날짜를 문자열 또는 Date
개체로 출력합니다.
new Date()
는 현재 날짜와 함께 Date
객체를 반환합니다. ISODate 도우미는 mongosh에 의해 이 개체를 래핑합니다. ISODate는 UTC(Universal Time)입니다.
new Date()
함수 Object() { [네이티브 코드] }
또는 ISODate()
메서드를 사용하여 0에서 9999 사이의 연도가 포함된 ISO-8601 날짜 문자열을 제공하여 특정 날짜를 정의할 수 있습니다. . 이러한 함수는 다음 형식을 허용합니다.
- 제공된 날짜가 포함된 ISODate는
new Date("")
에 의해 반환됩니다. new Date("")
는 클라이언트의 현지 시간대에서 DateTime을 지정하고 UTC에서 해당 DateTime과 함께 ISODate를 반환합니다.new Date(<integer>)
는 UNIX epoch(1970년 1월 1일) 이후 밀리초 단위로 지정된 DateTime이 있는 ISODate 인스턴스를 반환합니다.
MongoDB에서 Date()
메서드의 동작
‘Date’ 개체는 Unix 시대 이후의 밀리초를 나타내는 부호 있는 64비트 정수로 내부적으로 유지됩니다.
모든 데이터베이스 프로시저 및 드라이버는 전체 64비트 범위를 지원하지 않습니다. 포함 범위 0에서 9999까지의 연도가 포함된 날짜는 안전하게 처리할 수 있습니다.
Date()
메서드의 예
쿼리에서 Date()
사용
다음 코드는 products
컬렉션에 _id
가 1인 문서가 없는 경우 dateAdded
필드가 현재 날짜로 설정된 문서를 추가합니다.
db.products.updateOne(
{ _id: 1 },
{
$set: { item: "apple" },
$setOnInsert: { dateAdded: new Date() }
},
{ upsert: true }
)
날짜를 문자열로 반환
Date()
메서드를 사용하여 다음 예제와 같이 날짜를 문자열로 반환합니다.
var myDateString = Date();
날짜를 날짜
개체로 반환
Mongosh는 날짜 유형의 개체를 ISODate 도우미로 래핑합니다. 그러나 객체는 날짜 유형으로 유지됩니다.
다음 예제에서는 new Date()
를 사용하여 지정된 UTC DateTime이 있는 Date
객체를 반환합니다.
var myDate = new Date("2016-05-18T16:00:00Z");
MongoDB 날짜순 정렬
MongoDB의 sort()
함수와 $sort
집계를 사용하여 이 문제를 해결할 수 있습니다. 이 도구를 사용하여 데이터를 오름차순 또는 내림차순으로 정렬할 수 있습니다.
예:
db.posts.find().pretty()
{
"_id" : 1,
"title" : "MongoDB",
"body" : "Hi there",
"date" : "2021-01-01T00:00:00.000Z",
"Country" : "United Kingdom"
}
{
"_id" : 2,
"title" : "MySQL",
"body" : "Hello",
"date" : ISODate("2020-01-01T00:00:00Z"),
"Country" : "United States of America"
}
{
"_id" : 3,
"title" : "SQL",
"body" : "World",
"date" : ISODate("2021-01-01T00:00:00Z"),
"Country" : "New Zealand"
}
일부 데이터는 게시물 모음에 추가되며 날짜 필드는 이전 날짜가 먼저 표시되도록 데이터를 오름차순으로 정렬합니다.
db.posts.find().sort({ date: 1 }).pretty()
{
"_id" : 1,
"title" : "MongoDB",
"body" : "Hi there",
"date" : "2021-01-01T00:00:00.000Z",
"Country" : "United Kingdom"
}
{
"_id" : 2,
"title" : "MySQL",
"body" : "Hello",
"date" : ISODate("2020-01-01T00:00:00Z"),
"Country" : "United States of America"
}
{
"_id" : 3,
"title" : "SQL",
"body" : "World",
"date" : ISODate("2021-01-01T00:00:00Z"),
"Country" : "New Zealand"
}
첫 번째 문서에는 날짜
개체가 아닌 날짜 문자열이 있기 때문에 문서 2의 날짜가 나중이더라도 날짜 문자열이 먼저 나타납니다.
MongoDB 날짜별 정렬이 작동하지 않음
MongoDB가 작동하지 않는 이유는 여러 가지가 있을 수 있지만 MongoDB에서 날짜순으로 정렬하려면 몇 가지 절차를 기억해야 합니다.
- 데이터를 컬렉션에 저장하고 있다는 점을 항상 기억하십시오.
- 문서 내에
날짜
필드를 저장하는 두 가지 방법이 있습니다.Date()
및ISODate()
입니다. sort()
메소드를 사용하여날짜
필드를 정렬할 때 어떤 데이터 유형을 사용했는지 확인하십시오.
예:
db.document.insertOne({ "productId" : 1001, "productDeliveryDateTime": new Date() });
{
"acknowledged" : true,
"insertedId" : ObjectId("611c9e39e1fdc428cf238802")
}
이 예제에서는 Date()
문자열을 사용하여 날짜를 추가하고 컬렉션 이름은 문서입니다. 같은 방법으로 ISODate()
를 사용하여 문서에 날짜를 삽입할 수 있습니다.
ISODate()
를 사용하여 MongoDB에 날짜 및 시간 저장
$gte
연산자와 ISODate()
를 사용하여 MongoDB에서 ISODate로 날짜 쿼리를 구현합니다.
이를 더 잘 파악하기 위해 문서를 사용하여 컬렉션을 만들어 봅시다. 다음은 문서로 컬렉션을 구성하는 쿼리입니다.
> db.dateDemo.insertOne({"StudentName":"John","StudentAge":26,"AdmissionDate":new ISODate("2013-06-07")});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8a65799064dcd4a68b70ea")
}
find()
기능은 컬렉션의 모든 문서를 표시할 수 있습니다.
질문:
db.dateDemo.find().pretty();
출력:
ISODate()
를 사용한 날짜 쿼리:
> db.dateDemo.find({"AdmissionDate":{"$gte": ISODate("2013-06-07T00:00:00Z")}}).pretty();
출력:
결론
이 기사에서는 Date()
메서드에 대해 간략하게 설명했습니다. 그런 다음 Date()
메서드를 사용하여 컬렉션을 정렬하는 문제가 지적됩니다.
날짜 쿼리가 MongoDB에서 ISODate와 함께 작동하는 방식을 예로 설명합니다. 또한 이것은 MongoDB에서 날짜와 시간을 저장하는 가장 좋은 형식이 네이티브 JavaScript Date()
또는 ISODate()
형식을 사용하여 내부적으로 BSON 네이티브 Date
객체로 변환한다는 것을 보여주었습니다.