MongoDB 컬렉션에서 특정 키-값 쌍만 조회하고 싶다면 점(.) 표기법(dot notation)을 활용하면 됩니다. 점 표기법을 사용하면 중첩된 문서(nested document) 내부의 특정 필드에 손쉽게 접근할 수 있습니다.
1. 샘플 컬렉션 생성하기
먼저 실습에 사용할 문서를 포함한 컬렉션을 생성해 보겠습니다. 아래 예제에서는 학생 정보를 담은 중첩 문서를 하나 삽입합니다.
> db.readSpecificKeyValueDemo.insertOne(
... {
... "_id": 100,
... "StudentDetails":
... {
... "StudentFirstName" : "David",
... "StudentLastName" : "Miller",
... "StudentAge": 23,
... "StudentCountryName": "US"
... }
... }
... );
{ "acknowledged" : true, "insertedId" : 100 }2. 전체 문서 확인하기
컬렉션이 정상적으로 생성되었는지 확인하기 위해 find() 메서드와 pretty() 메서드를 함께 사용하여 모든 문서를 출력해 보겠습니다.
> db.readSpecificKeyValueDemo.find().pretty();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{
"_id" : 100,
"StudentDetails" : {
"StudentFirstName" : "David",
"StudentLastName" : "Miller",
"StudentAge" : 23,
"StudentCountryName" : "US"
}
}3. 특정 키-값 쌍만 조회하기
이제 본격적으로 점 표기법을 사용하여 중첩 문서 안의 특정 필드만 조회해 보겠습니다. find() 메서드의 두 번째 인자인 프로젝션(projection) 부분에 원하는 필드 경로를 지정하고 값을 1로 설정하면, 해당 필드만 결과에 포함됩니다.
> db.readSpecificKeyValueDemo.find({},{"StudentDetails.StudentCountryName":1}).pretty();실행 결과는 다음과 같습니다.
{ "_id" : 100, "StudentDetails" : { "StudentCountryName" : "US" } }핵심 정리
- 점 표기법:
"상위필드.하위필드"형태로 중첩 문서의 내부 필드에 접근합니다. - 프로젝션:
find()의 두 번째 인자에서 필드명 뒤에1을 붙이면 해당 필드만 반환되고,0을 붙이면 제외됩니다. - _id 필드: 별도로 지정하지 않아도 기본적으로 항상 함께 반환됩니다.
이처럼 점 표기법과 프로젝션을 조합하면 대용량 데이터에서도 필요한 정보만 효율적으로 추출할 수 있어 네트워크 전송량과 애플리케이션 성능 측면에서 큰 이점을 얻을 수 있습니다.