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

MongoDB에서 날짜 기반으로 쿼리 결과를 반환하는 방법

MongoDB에서 날짜(Date) 값을 조건으로 문서를 조회하고 싶다면, ISODate 타입과 비교 연산자를 함께 사용하면 됩니다. 이 글에서는 실제 예제를 통해 날짜 기반 쿼리 작성 방법을 단계별로 살펴보겠습니다.

1. 예제용 컬렉션 생성

먼저 개념을 이해하기 위해 문서가 포함된 컬렉션을 생성해 보겠습니다. 승객 정보(이름, 나이, 도착 시간)를 저장하는 컬렉션을 만드는 쿼리는 다음과 같습니다.

> db.returnQueryFromDate.insertOne({"PassengerName":"John","PassengerAge":23,"PassengerArrivalTime":new ISODate("2018-03-10 14:45:56")});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c8a57be9064dcd4a68b70e4")
}
> db.returnQueryFromDate.insertOne({"PassengerName":"Larry","PassengerAge":21,"PassengerArrivalTime":new ISODate("2018-05-19 11:10:23")});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c8a57bf9064dcd4a68b70e5")
}
> db.returnQueryFromDate.insertOne({"PassengerName":"Mike","PassengerAge":24,"PassengerArrivalTime":new ISODate("2018-08-25 16:40:12")});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c8a57bf9064dcd4a68b70e6")
}
> db.returnQueryFromDate.insertOne({"PassengerName":"Carol","PassengerAge":26,"PassengerArrivalTime":new ISODate("2019-01-29 09:45:10")});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c8a57bf9064dcd4a68b70e7")
}

위 쿼리는 총 4개의 문서를 returnQueryFromDate 컬렉션에 삽입합니다. 각 문서에는 승객 이름(PassengerName), 나이(PassengerAge), 그리고 도착 시간(PassengerArrivalTime)이 ISODate 형식으로 저장됩니다.

2. 전체 문서 조회하기

find() 메서드를 사용하면 컬렉션의 모든 문서를 확인할 수 있습니다.

> db.returnQueryFromDate.find().pretty();

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

{
    "_id" : ObjectId("5c8a57be9064dcd4a68b70e4"),
    "PassengerName" : "John",
    "PassengerAge" : 23,
    "PassengerArrivalTime" : ISODate("2018-03-10T14:45:56Z")
}
{
    "_id" : ObjectId("5c8a57bf9064dcd4a68b70e5"),
    "PassengerName" : "Larry",
    "PassengerAge" : 21,
    "PassengerArrivalTime" : ISODate("2018-05-19T11:10:23Z")
}
{
    "_id" : ObjectId("5c8a57bf9064dcd4a68b70e6"),
    "PassengerName" : "Mike",
    "PassengerAge" : 24,
    "PassengerArrivalTime" : ISODate("2018-08-25T16:40:12Z")
}
{
    "_id" : ObjectId("5c8a57bf9064dcd4a68b70e7"),
    "PassengerName" : "Carol",
    "PassengerAge" : 26,
    "PassengerArrivalTime" : ISODate("2019-01-29T09:45:10Z")
}

3. 날짜 조건으로 쿼리 실행하기

이제 핵심인 날짜 기반 쿼리입니다. 특정 날짜 이후에 도착한 승객 기록만 조회하려면 $gte(greater than or equal, 크거나 같음) 연산자를 사용합니다. 아래 예제는 2018-05-19T11:10:23Z 이상인 날짜를 가진 문서만 반환합니다.

> db.returnQueryFromDate.find({"PassengerArrivalTime" : { $gte : new ISODate("2018-05-19T11:10:23Z") }}).pretty();

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

{
    "_id" : ObjectId("5c8a57bf9064dcd4a68b70e5"),
    "PassengerName" : "Larry",
    "PassengerAge" : 21,
    "PassengerArrivalTime" : ISODate("2018-05-19T11:10:23Z")
}
{
    "_id" : ObjectId("5c8a57bf9064dcd4a68b70e6"),
    "PassengerName" : "Mike",
    "PassengerAge" : 24,
    "PassengerArrivalTime" : ISODate("2018-08-25T16:40:12Z")
}
{
    "_id" : ObjectId("5c8a57bf9064dcd4a68b70e7"),
    "PassengerName" : "Carol",
    "PassengerAge" : 26,
    "PassengerArrivalTime" : ISODate("2019-01-29T09:45:10Z")
}

결과를 보면 John의 기록은 제외되고, 지정한 날짜와 같거나 이후인 Larry, Mike, Carol의 기록만 출력된 것을 확인할 수 있습니다.

참고: 다른 날짜 비교 연산자

날짜 조건 쿼리에는 $gte 외에도 다양한 비교 연산자를 활용할 수 있습니다.

  • $gt: 지정한 날짜보다 (초과)
  • $gte: 지정한 날짜보다 크거나 같은 (이상)
  • $lt: 지정한 날짜보다 작은 (미만)
  • $lte: 지정한 날짜보다 작거나 같은 (이하)

예를 들어 특정 기간 사이의 데이터를 조회하려면 다음과 같이 두 조건을 조합할 수 있습니다.

> db.returnQueryFromDate.find({
...   "PassengerArrivalTime": {
...     $gte: new ISODate("2018-01-01T00:00:00Z"),
...     $lt: new ISODate("2019-01-01T00:00:00Z")
...   }
... }).pretty();

이처럼 MongoDB에서는 ISODate 객체와 비교 연산자를 조합하여 원하는 날짜 범위의 데이터를 손쉽게 조회할 수 있습니다.