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

MongoDB 쿼리에서 하위 문서(서브도큐먼트)에 접근하는 방법

MongoDB에서 하위 문서에 접근하는 기본 개념

MongoDB에서 하위 문서(subdocument)에 접근하려면 find() 메서드와 함께 점 표기법(dot notation)을 사용하면 됩니다. 점 표기법은 상위 필드 이름과 하위 필드 이름을 마침표(.)로 연결하는 방식으로, 예를 들어 details.SubjectName처럼 작성합니다.

이해를 돕기 위해 먼저 문서를 포함한 컬렉션을 생성해 보겠습니다.

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

> db.demo670.insertOne({
... id:101,
... "details":
... {
... Name:"Chris",
... Age:21,
... CountryName:"US",
... SubjectName:"MongoDB"
... }
... }
... );
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea3e31d04263e90dac943de")
}
> db.demo670.insertOne({ id:102, "details": { Name:"David", Age:22, CountryName:"UK", SubjectName:"MySQL" } } );
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea3e33604263e90dac943df")
}

위 코드에서는 각 문서가 id 필드와 details라는 하위 문서를 가지고 있습니다. 하위 문서 안에는 Name, Age, CountryName, SubjectName 필드가 포함되어 있습니다.

2. 컬렉션의 모든 문서 조회하기

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

> db.demo670.find();

이 쿼리는 다음과 같은 결과를 출력합니다.

{ "_id" : ObjectId("5ea3e31d04263e90dac943de"), "id" : 101, "details" : { "Name" : "Chris", "Age" : 21, "CountryName" : "US", "SubjectName" : "MongoDB" } }
{ "_id" : ObjectId("5ea3e33604263e90dac943df"), "id" : 102, "details" : { "Name" : "David", "Age" : 22, "CountryName" : "UK", "SubjectName" : "MySQL" } }

3. 점 표기법으로 하위 문서 접근하기

이제 하위 문서에 접근하는 핵심 쿼리를 살펴보겠습니다. 아래 쿼리는 details.SubjectName이 "MongoDB"인 문서를 찾으면서, 두 번째 인자인 프로젝션을 통해 details.CountryName 필드만 반환하도록 설정했습니다.

> db.demo670.find({"details.SubjectName":"MongoDB"},{"details.CountryName":1});

실행 결과는 다음과 같습니다.

{ "_id" : ObjectId("5ea3e31d04263e90dac943de"), "details" : { "CountryName" : "US" } }

정리

이처럼 MongoDB에서는 점 표기법("상위필드.하위필드")을 활용하면 중첩된 하위 문서의 특정 필드를 손쉽게 조회하고 조건으로 사용할 수 있습니다. 프로젝션(projection)을 함께 사용하면 필요한 필드만 선택적으로 반환받아 더욱 효율적인 쿼리를 작성할 수 있습니다.