MongoDB에서 문서의 일부 필드(하위 집합)만 조회하고 싶다면 find() 메서드에 도트 표기법(dot notation)을 활용하면 됩니다. 이 글에서는 예제 컬렉션을 만들고, 특정 조건에 맞는 문서에서 원하는 필드만 추출하는 방법을 단계별로 살펴보겠습니다.
1. 예제 컬렉션 생성하기
먼저 insertOne() 메서드를 사용해 클라이언트 정보를 담은 문서 두 개를 컬렉션에 삽입합니다.
> db.demo307.insertOne({
... "CleintId": 101,
... "ClientDetails": {"ClientFirstName": "Chris", "Age": 34},
... "ClientCountryName": "US"
... });
{
"acknowledged" : true,
"insertedId" : ObjectId("5e4eab88f8647eb59e56203c")
}
> db.demo307.insertOne({
... "CleintId": 102,
... "ClientDetails": {"ClientFirstName": "David", "Age": 31},
... "ClientCountryName": "UK"
... });
{
"acknowledged" : true,
"insertedId" : ObjectId("5e4eab97f8647eb59e56203d")
}
2. 전체 문서 확인하기
find() 메서드를 인자 없이 실행하면 컬렉션의 모든 문서를 조회할 수 있습니다.
> db.demo307.find();
실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5e4eab88f8647eb59e56203c"), "CleintId" : 101, "ClientDetails" : { "ClientFirstName" : "Chris", "Age" : 34 }, "ClientCountryName" : "US" }
{ "_id" : ObjectId("5e4eab97f8647eb59e56203d"), "CleintId" : 102, "ClientDetails" : { "ClientFirstName" : "David", "Age" : 31 }, "ClientCountryName" : "UK" }
3. 도트 표기법으로 원하는 필드만 조회하기
이제 중첩된 필드에 접근하기 위해 도트 표기법을 사용한 쿼리를 작성해 보겠습니다. 아래 쿼리는 이름이 'David'인 클라이언트를 찾되, 나머지 불필요한 필드들은 값 0을 지정해 결과에서 제외합니다.
> db.demo307.find(
{"ClientDetails.ClientFirstName": 'David'},
{"ClientDetails.Age": 0, "ClientCountryName": 0, CleintId: 0, _id: 0}
);
실행 결과는 다음과 같습니다.
{ "ClientDetails" : { "ClientFirstName" : "David" } }
핵심 정리
- 도트 표기법(예:
"ClientDetails.ClientFirstName")을 사용하면 중첩된 내부 필드에 직접 접근할 수 있습니다. - find()의 두 번째 인자인 프로젝션(projection)에서 제외할 필드에
0을 지정하면 해당 필드가 결과에서 생략됩니다. - 단,
_id를 제외한 다른 필드들과 함께 포함(1)과 제외(0)를 혼용할 수는 없으므로 주의해야 합니다.