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

MongoDB에서 간단한 쿼리로 문서를 필터링하는 방법

MongoDB에서 간단한 쿼리로 문서 필터링하기

MongoDB에서 특정 조건에 맞는 문서만 골라내고 싶다면 $match 연산자를 사용하면 됩니다. $match는 애그리게이션(집계) 파이프라인에서 지정한 조건과 일치하는 문서만 다음 단계로 전달하는 역할을 합니다.

이번 글에서는 실제 예제를 통해 컬렉션 생성부터 문서 필터링까지 전 과정을 살펴보겠습니다.

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

먼저 insertOne() 메서드를 사용해 demo629 컬렉션에 문서를 생성합니다. 이 문서에는 과목 목록(Subject)과 학생별 세부 정보(details)가 배열 형태로 포함되어 있습니다.

> db.demo629.insertOne(
...    {
...       "Subject": [
...          "MySQL",
...          "MongoDB"
...       ],
...       "details": [
...          {
...             Name:"Chris",
...             "Marks":78
...          },
...          { Name:"David",
...             "Marks":89
...          }
...       ]
...    }
... );
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e9ae9f56c954c74be91e6b9")
}

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

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

> db.demo629.find();

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

{ "_id" : ObjectId("5e9ae9f56c954c74be91e6b9"), "Subject" : [ "MySQL", "MongoDB" ], "details" : [ { "Name" : "Chris", "Marks" : 78 }, { "Name" : "David", "Marks" : 89 } ] }

3. 간단한 쿼리로 문서 필터링하기

이제 aggregate() 메서드와 함께 $unwind, $match, $project를 조합하여 원하는 문서만 추출해 보겠습니다.

  • $unwind: details 배열의 각 요소를 개별 문서로 분해합니다.
  • $match: 이름이 'Chris'이면서 Subject가 Java, MySQL, Python, C, C++ 중 하나에 해당하는 문서만 필터링합니다.
  • $project: details 필드만 출력하고 _id는 제외합니다.
> db.demo629.aggregate([
...    {"$unwind": "$details"},
...    {"$match": {"details.Name": 'Chris', "Subject": {"$in":["Java","MySQL","Python","C","C++"]}}},
...    {"$project": {"details": 1, "_id": 0}}
... ]);

쿼리 실행 결과, 조건에 일치하는 Chris의 정보만 정확히 출력되는 것을 확인할 수 있습니다.

{ "details" : { "Name" : "Chris", "Marks" : 78 } }

정리

이처럼 MongoDB에서는 $match를 활용해 간단한 쿼리만으로도 원하는 조건의 문서를 손쉽게 필터링할 수 있습니다. 배열 필드를 다룰 때는 $unwind로 먼저 분해한 뒤 $match로 조건을 걸고, $project로 필요한 필드만 선택하면 깔끔한 결과를 얻을 수 있습니다.