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 구조 속에서 원하는 값만 간단히 조회할 수 있습니다. 여기에 프로젝션 옵션까지 함께 사용하면 불필요한 데이터를 걸러내고 필요한 필드만 효율적으로 가져올 수 있어, 대용량 컬렉션을 다룰 때 특히 유용합니다.