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

MongoDB 컬렉션의 배열 값에 접근해 특정 문서 가져오는 방법

MongoDB에서 배열 내부의 값에 접근하려면 점(.) 표기법(dot notation)을 사용하면 됩니다. 이번 글에서는 실제 예제를 통해 배열 필드에 담긴 하위 문서 중 특정 조건에 맞는 데이터를 조회하는 방법을 단계별로 살펴보겠습니다.

1단계: 샘플 컬렉션 생성하기

먼저 insertOne() 메서드를 사용해 ProductDetails라는 배열 필드를 포함한 문서 두 개를 생성합니다.

> db.demo326.insertOne({id:101,"ProductDetails":[{"ProductId":"Prod-101","ProductName":"Product-1"},
... {"ProductId":"Prod-102","ProductName":"Product-2"}
... ]
... }
... );
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e516751f8647eb59e562074")
}
> db.demo326.insertOne({id:103,"ProductDetails":[{"ProductId":"Prod-104","ProductName":"Product-5"},
... {"ProductId":"Prod-105","ProductName":"Product-6"}
... ]
... }
... );
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e516771f8647eb59e562075")
}

2단계: 전체 문서 조회하기

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

> db.demo326.find();

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

{
   "_id" : ObjectId("5e516751f8647eb59e562074"), "id" : 101, "ProductDetails" : [
      { "ProductId" : "Prod-101", "ProductName" : "Product-1" },
      { "ProductId" : "Prod-102", "ProductName" : "Product-2" }
   ]
}
{
   "_id" : ObjectId("5e516771f8647eb59e562075"), "id" : 103, "ProductDetails" : [
      { "ProductId" : "Prod-104", "ProductName" : "Product-5" },
      { "ProductId" : "Prod-105", "ProductName" : "Product-6" }
   ]
}

3단계: 배열 값으로 특정 문서 조회하기

다음 쿼리처럼 “배열 필드명.하위 문서의 키” 형태로 점 표기법을 작성하면, 배열 안의 값을 기준으로 원하는 문서만 정확하게 가져올 수 있습니다.

> db.demo326.find({"ProductDetails.ProductId":"Prod-104"});

실행 결과, ProductId가 Prod-104인 요소를 포함하고 있는 문서 하나만 반환됩니다.

{
   "_id" : ObjectId("5e516771f8647eb59e562075"), "id" : 103, "ProductDetails" : [
      { "ProductId" : "Prod-104", "ProductName" : "Product-5" },
      { "ProductId" : "Prod-105", "ProductName" : "Product-6" }
   ]
}

정리

MongoDB에서 배열에 저장된 하위 문서의 필드를 조회할 때 핵심은 점(.) 표기법입니다. “ProductDetails.ProductId”처럼 경로를 지정하면 MongoDB가 배열 내부의 모든 요소를 자동으로 검사하고, 조건과 일치하는 요소를 가진 문서만 반환합니다. 이 방식은 복잡한 집계 파이프라인 없이도 간단한 조건 검색을 빠르게 처리할 수 있어 실무에서 매우 유용하게 활용됩니다.