MongoDB에서 ISODate를 사용한 날짜 쿼리

Tahseen Tauseef 2023년6월20일
  1. MongoDB의 Date() 메서드
  2. Date() 메서드의 동작
  3. MongoDB의 쿼리에서 Date() 메서드 사용
  4. MongoDB에서 날짜순 정렬
  5. MongoDB에서 작동하지 않는 날짜순 정렬
  6. MongoDB에서 ISODate()를 사용한 작업 날짜 쿼리
MongoDB에서 ISODate를 사용한 날짜 쿼리

이 MongoDB 지침 게시물은 Date() 메서드를 설명합니다. 이 문서에서는 날짜 쿼리를 사용하는 다양한 접근 방식에 대해 설명합니다.

MongoDB의 Date() 메서드

Date() 메서드는 날짜를 문자열 또는 Date 개체로 반환합니다.

  1. MongoDB 셸 또는 mongosh에서 Date() 메서드는 현재 날짜를 문자열로 반환합니다.
  2. new Date() 함수는 현재 날짜가 포함된 Date 객체를 반환합니다. ISODate 도우미는 mongosh에 의해 Date 개체를 감싸고 있으며 ISODate는 UTC(Universal Time)입니다.

new Date() 함수 또는 ISODate() 메소드를 사용하여 '0'에서 '9999' 사이의 연도가 포함된 ISO-8601 날짜 문자열을 지정하여 특정 날짜를 정의할 수 있습니다. 이러한 함수는 다음 형식을 허용합니다.

  1. 제공된 날짜가 포함된 ISODatenew Date("")에 의해 반환됩니다.
  2. new Date("")는 클라이언트의 현지 시간대에서 DateTime을 지정하고 해당 DateTime이 포함된 ISODate를 UTC로 반환합니다.
  3. new Date("")는 UTC에서 DateTime을 가져오고 UTC에서 해당 DateTime과 함께 ISODate를 반환합니다.
  4. new Date(integer>)는 UNIX epoch(1970년 1월 1일) 이후 밀리초 단위로 지정된 DateTime이 있는 ISODate 인스턴스를 반환합니다.

Date() 메서드의 동작

‘Date’ 개체는 Unix 시대(1970년 1월 1일) 이후의 밀리초를 나타내는 부호 있는 64비트 정수로 내부적으로 유지됩니다. 모든 데이터베이스 프로시저 및 드라이버는 전체 64비트 범위를 지원하지 않습니다.

포함 범위 0에서 9999까지의 연도가 포함된 날짜는 안전하게 처리할 수 있습니다.

MongoDB의 쿼리에서 Date() 메서드 사용

다음 코드는 product 컬렉션에 1과 같은 _id가 있는 문서가 없는 경우 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에서 날짜별 정렬로 동작하기 위해서는 몇 가지 절차를 기억해야 합니다.

  1. 도움을 받으면 데이터를 컬렉션에 저장한다는 점을 항상 기억하십시오.
  2. 문서 내부에 날짜 필드를 저장하는 방법에는 두 가지가 있습니다.
  3. Date() 문자열 및 ISODate() 데이터 유형은 문서에 날짜를 저장하는 데 사용됩니다.
  4. sort() 메소드를 사용하여 날짜 필드를 정렬할 때 어떤 데이터 유형을 사용했는지 확인하십시오.

코드 예:

db.document.insertOne({ "productId" : 1001, "productDeliveryDateTime": new Date() });
{
        "acknowledged" : true,
        "insertedId" : ObjectId("611c9e39e1fdc428cf238802")
}

날짜는 Date() 문자열을 사용하여 추가되며 컬렉션 이름은 문서입니다. 같은 방법으로 ISODate()를 사용하여 문서에 날짜를 삽입할 수 있습니다.

MongoDB에서 ISODate()를 사용한 작업 날짜 쿼리

$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();

출력:

컬렉션에 문서를 표시하려면 find() 함수 사용

다음은 MongoDB에서 ISODate()를 사용한 날짜 쿼리입니다.

질문:

> db.dateDemo.find({"AdmissionDate":{"$gte": ISODate("2013-06-07T00:00:00Z")}}).pretty();

출력:

MongoDB에서 ISODate()로 날짜 쿼리

관련 문장 - MongoDB Query