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

MongoDB에서 범위 검색하기: sort()와 limit() 활용 방법

MongoDB에서 특정 범위에 해당하는 문서를 검색하려면 find() 쿼리와 함께 sort()limit() 메서드를 조합하여 사용할 수 있습니다. 이 글에서는 실제 예제를 통해 단계별로 살펴보겠습니다.

1. 샘플 컬렉션 생성

먼저 여러 개의 문서를 포함하는 컬렉션을 생성합니다. insertOne() 메서드를 사용해 'Value' 필드를 가진 문서들을 순차적으로 삽입합니다.

> db.demo665.insertOne({"Value":10});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea1bf1424113ea5458c7d08")
}
> db.demo665.insertOne({"Value":15});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea1bf1b24113ea5458c7d09")
}
> db.demo665.insertOne({"Value":55});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea1bf1e24113ea5458c7d0a")
}
> db.demo665.insertOne({"Value":25});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea1bf2324113ea5458c7d0b")
}
> db.demo665.insertOne({"Value":20});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea1bf2b24113ea5458c7d0c")
}

2. 전체 문서 확인하기

find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 조회할 수 있습니다.

> db.demo665.find();

위 쿼리를 실행하면 다음과 같은 출력 결과를 확인할 수 있습니다.

{ "_id" : ObjectId("5ea1bf1424113ea5458c7d08"), "Value" : 10 }
{ "_id" : ObjectId("5ea1bf1b24113ea5458c7d09"), "Value" : 15 }
{ "_id" : ObjectId("5ea1bf1e24113ea5458c7d0a"), "Value" : 55 }
{ "_id" : ObjectId("5ea1bf2324113ea5458c7d0b"), "Value" : 25 }
{ "_id" : ObjectId("5ea1bf2b24113ea5458c7d0c"), "Value" : 20 }

3. 범위 검색 쿼리 실행

이제 MongoDB에서 범위를 검색하는 핵심 쿼리를 살펴보겠습니다. 아래 쿼리는 Value 값이 30 이하인 문서를 내림차순으로 정렬한 뒤, 상위 2개의 문서만 반환합니다.

> db.demo665.find({Value:{$lte:30}}).sort({Value:-1}).limit(2);

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

{ "_id" : ObjectId("5ea1bf2324113ea5458c7d0b"), "Value" : 25 }
{ "_id" : ObjectId("5ea1bf2b24113ea5458c7d0c"), "Value" : 20 }

쿼리 동작 원리

이 쿼리가 어떻게 동작하는지 각 부분별로 자세히 살펴보겠습니다.

$lte 연산자: 'less than or equal'의 약자로, 지정한 값 이하인 문서만 필터링합니다. 위 예제에서는 Value가 30 이하인 문서(10, 15, 25, 20)만 선택됩니다.

sort({Value:-1}): Value 필드를 기준으로 내림차순(-1) 정렬을 수행합니다. 따라서 25, 20, 15, 10 순서로 정렬됩니다.

limit(2): 정렬된 결과 중 상위 2개의 문서만 반환하여 최종 결과를 제한합니다.

이처럼 find(), sort(), limit() 세 가지 메서드를 조합하면 조건에 맞는 범위 데이터를 원하는 순서와 개수로 손쉽게 조회할 수 있습니다. 오름차순 정렬이 필요한 경우에는 sort({Value:1})처럼 값을 1로 설정하면 됩니다.