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

MongoDB에서 JSON 데이터의 내부 값 추출하는 방법 (find() + 점 표기법)

MongoDB에서 JSON 데이터의 내부 값 추출하기

MongoDB에 저장된 JSON 문서에서 특정 내부 값만 골라 조회하고 싶다면 find() 메서드와 점(.) 표기법(dot notation)을 함께 사용하면 됩니다. 이번 글에서는 중첩된 배열 구조를 가진 문서를 직접 만들어 보고, 그 안의 특정 필드 값만 추출하는 과정을 단계별로 살펴보겠습니다.

1단계: 샘플 컬렉션 생성

먼저 insertOne() 메서드를 사용하여 중첩 배열을 포함한 문서를 삽입합니다. 아래 예제에는 학생 정보(details)와 과목별 점수(otherdetails)가 배열 형태로 들어 있습니다.

> db.demo235.insertOne(
...    {
...       "id":101,
...       "details":[
...          {
...             "Name":"Chris Brown",
...             "Age":21
...          },
...          {
...             "Name":"David Miller",
...             "Age":24
...          }
...       ],
...       "otherdetails":[
...          {
...             "Score":56,
...             "Subject":"MongoDB"
...          },
...          {
...             "Score":78,
...             "Subject":"MySQL"
...          }
...       ]
...    }
...);
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e418d22f4cebbeaebec514b")
}

2단계: 전체 문서 확인

find() 메서드를 사용하여 컬렉션의 모든 문서를 표시합니다.

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

위 명령을 실행하면 다음과 같은 결과가 출력됩니다.

{
   "_id" : ObjectId("5e418d22f4cebbeaebec514b"),
   "id" : 101,
   "details" : [
      {
         "Name" : "Chris Brown",
         "Age" : 21
      },
      {
         "Name" : "David Miller",
         "Age" : 24
      }
   ],
   "otherdetails" : [
      {
         "Score" : 56,
         "Subject" : "MongoDB"
      },
      {
         "Score" : 78,
         "Subject" : "MySQL"
      }
   ]
}

3단계: 점 표기법으로 내부 값만 조회하기

다음은 JSON 데이터의 내부 값만 조회하는 쿼리입니다. 두 번째 인자인 프로젝션(projection)에서 "otherdetails.Subject":1은 해당 필드만 결과에 포함하겠다는 의미이며, _id:0은 기본적으로 항상 출력되는 _id 필드를 제외하겠다는 뜻입니다.

> db.demo235.find({},{"otherdetails.Subject":1,_id:0});

실행 결과, otherdetails 배열 안의 Subject 값만 깔끔하게 추출됩니다.

{ "otherdetails" : [ { "Subject" : "MongoDB" }, { "Subject" : "MySQL" } ] }

정리

이처럼 MongoDB에서는 점 표기법("배열명.필드명")을 활용하면 중첩된 JSON 구조 속에서 원하는 값만 간단히 조회할 수 있습니다. 여기에 프로젝션 옵션까지 함께 사용하면 불필요한 데이터를 걸러내고 필요한 필드만 효율적으로 가져올 수 있어, 대용량 컬렉션을 다룰 때 특히 유용합니다.