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

MongoDB에서 특정 숫자보다 큰 필드 값을 가진 문서를 일치시키고 가져오는 방법

MongoDB에서 특정 조건에 맞는 문서를 필터링하려면 $match 연산자를 사용합니다. 특정 숫자보다 큰 값을 찾으려면 $gt(greater than) 연산자를 함께 활용하면 됩니다.

이 글에서는 실제 예제를 통해 컬렉션 생성부터 조건에 맞는 문서를 집계 파이프라인으로 조회하는 과정까지 단계별로 살펴보겠습니다.

1. 컬렉션 생성 및 문서 삽입

먼저 insertOne() 메서드를 사용하여 데모용 컬렉션에 문서를 생성합니다.

> db.demo730.insertOne({"Name" : "Chris", "Marks" : 33 });
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5eac54cd56e85a39df5f6339")
}
> db.demo730.insertOne({ "Name" : "David", "Marks" : 89});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5eac54cd56e85a39df5f633a")
}
> db.demo730.insertOne({ "Name" : "Chris", "Marks" : 45 });
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5eac54ce56e85a39df5f633b")
}

2. find() 메서드로 전체 문서 조회

삽입된 모든 문서를 확인하려면 find() 메서드를 사용합니다.

> db.demo730.find();

위 쿼리는 다음과 같은 결과를 출력합니다.

{ "_id" : ObjectId("5eac54cd56e85a39df5f6339"), "Name" : "Chris", "Marks" : 33 }
{ "_id" : ObjectId("5eac54cd56e85a39df5f633a"), "Name" : "David", "Marks" : 89 }
{ "_id" : ObjectId("5eac54ce56e85a39df5f633b"), "Name" : "Chris", "Marks" : 45 }

3. $match와 $gt로 조건에 맞는 문서 가져오기

이제 aggregate() 파이프라인에서 $match$gt를 조합하여, 특정 숫자(여기서는 40)보다 큰 점수를 가진 'Chris'의 문서 또는 이름이 'David'인 문서를 조회하는 쿼리를 작성해 보겠습니다.

> db.demo730.aggregate([
...    { $sort: { _id: -1 } },
...    { $limit: 3 },
...    {$match: { $or: [ {"Name": "Chris", "Marks": { "$gt": 40 }}, {"Name": "David"} ]}}
... ])

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

{ "_id" : ObjectId("5eac54ce56e85a39df5f633b"), "Name" : "Chris", "Marks" : 45 }
{ "_id" : ObjectId("5eac54cd56e85a39df5f633a"), "Name" : "David", "Marks" : 89 }

결과 분석

위 결과를 보면 다음 두 가지 조건 중 하나를 만족하는 문서만 반환된 것을 확인할 수 있습니다.

- 이름이 'Chris'이면서 Marks 값이 40보다 큰 문서 → Marks가 33인 첫 번째 문서는 제외되고, 45인 세 번째 문서만 포함됩니다.
- 이름이 'David'인 문서 → 별도의 점수 조건 없이 모두 포함됩니다.

이처럼 $or 연산자를 활용하면 여러 조건을 OR 논리로 결합할 수 있으며, $sort$limit 스테이지를 함께 사용하면 정렬 후 원하는 개수만큼의 문서를 효율적으로 처리할 수 있습니다.