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

MongoDB에서 객체의 특정 필드만 필터링하고 SubjectName 값을 추출하는 방법

MongoDB에서 배열 내 객체의 일부 필드를 필터링하고 원하는 값만 가져오려면 프로젝션(projection)과 함께 $filter 연산자와 $match 단계를 활용하면 됩니다. 이 글에서는 실제 예제를 통해 그 과정을 단계별로 살펴보겠습니다.

1. 샘플 컬렉션 생성하기

먼저 문서가 포함된 컬렉션을 생성합니다.

> db.demo507.insertOne(
... {
...    "Information":
...    [
...       {"Name":"John","SubjectName":"MySQL"},
...       {"Name":"Bob","SubjectName":"MongoDB"},
...       {"Name":"Chris","SubjectName":"MySQL"},
...       {"Name":"David","SubjectName":"C++"}
...    ]
... }
... );
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e8836d3987b6e0e9d18f577")
}

2. find() 메서드로 전체 문서 확인하기

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

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

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

{
   "_id" : ObjectId("5e8836d3987b6e0e9d18f577"),
   "Information" : [
      {
         "Name" : "John",
         "SubjectName" : "MySQL"
      },
      {
         "Name" : "Bob",
         "SubjectName" : "MongoDB"
      },
      {
         "Name" : "Chris",
         "SubjectName" : "MySQL"
      },
      {
         "Name" : "David",
         "SubjectName" : "C++"
      }
   ]
}

3. $match와 $filter로 특정 필드 필터링하기

이제 객체 내부의 일부 필드를 필터링하는 집계 쿼리를 살펴보겠습니다. 아래 쿼리는 $match로 SubjectName이 'MySQL'인 문서를 먼저 걸러낸 뒤, $filter로 Information 배열에서 조건에 맞는 요소만 남기고, 마지막으로 두 번째 $project 단계에서 SubjectName 필드만 선택해 반환합니다.

> db.demo507.aggregate([
...    {$match: {"Information.SubjectName" : "MySQL" } },
...    {$project: {
...       _id:0,
...       Information: {
...          $filter: {
...             input: '$Information',
...             as: 'result',
...             cond: {$eq: ['$$result.SubjectName', 'MySQL']}
...          }
...       }
...    }
... },{$project: {Information: { SubjectName:1}}}
... ]);

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

{ "Information" : [ { "SubjectName" : "MySQL" }, { "SubjectName" : "MySQL" } ] }

핵심 정리

  • $match: 조건에 맞는 문서만 걸러내는 파이프라인 단계입니다.
  • $filter: 배열 요소 중 cond 조건을 만족하는 항목만 남깁니다.
  • $project: _id 제거나 특정 필드(예: SubjectName)만 포함하도록 출력 형태를 제어합니다.

이처럼 세 가지 연산자를 조합하면 MongoDB에서 배열 안의 객체 데이터를 효율적으로 필터링하고 필요한 값만 깔끔하게 추출할 수 있습니다.