MongoDB에서 특정 필드만 선택하여 조회하기
MongoDB의 find() 메서드에 프로젝션(projection)을 사용하면 컬렉션 내 문서 전체가 아닌, 필요한 특정 필드만 골라서 표시할 수 있습니다. 이번 글에서는 실제 예제를 통해 그 방법을 단계별로 살펴보겠습니다.
1. 샘플 컬렉션 생성
먼저 insertOne() 메서드를 사용해 문서가 담긴 컬렉션을 생성합니다.
> db.querySelectDemo.insertOne({UserId:100,UserName:"Chris",UserAge:25});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ce90eb478f00858fb12e90e")
}
> db.querySelectDemo.insertOne({UserId:101,UserName:"Robert",UserAge:26});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ce90ec578f00858fb12e90f")
}
> db.querySelectDemo.insertOne({UserId:103,UserName:"David",UserAge:27});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ce90ed478f00858fb12e910")
}위 명령은 UserId, UserName, UserAge 세 개의 필드를 가진 문서 세 개를 querySelectDemo 컬렉션에 삽입합니다.
2. find()로 전체 문서 확인하기
find() 메서드를 사용하면 컬렉션의 모든 문서를 조회할 수 있습니다. pretty() 메서드를 함께 사용하면 결과를 보기 좋게 정렬해서 출력합니다.
> db.querySelectDemo.find().pretty();
위 쿼리는 다음과 같은 출력을 생성합니다.
{
"_id" : ObjectId("5ce90eb478f00858fb12e90e"),
"UserId" : 100,
"UserName" : "Chris",
"UserAge" : 25
}
{
"_id" : ObjectId("5ce90ec578f00858fb12e90f"),
"UserId" : 101,
"UserName" : "Robert",
"UserAge" : 26
}
{
"_id" : ObjectId("5ce90ed478f00858fb12e910"),
"UserId" : 103,
"UserName" : "David",
"UserAge" : 27
}기본적으로 모든 필드가 출력되는 것을 확인할 수 있습니다.
3. 프로젝션으로 특정 필드만 표시하기
find() 메서드의 두 번째 인자에 프로젝션 객체를 전달하면 원하는 필드만 선택적으로 표시할 수 있습니다. 표시할 필드는 true(또는 1)로 설정하고, 제외할 필드는 false(또는 0)로 설정합니다.
다음은 _id 필드는 제외(0)하고 UserName 필드만 포함(true)하는 쿼리입니다.
> db.querySelectDemo.find({},{_id:0,UserName:true});이 쿼리는 다음과 같은 출력을 생성합니다.
{ "UserName" : "Chris" }
{ "UserName" : "Robert" }
{ "UserName" : "David" }정리 및 참고 사항
MongoDB에서 프로젝션을 사용할 때 몇 가지 중요한 규칙이 있습니다.
_id 필드: 기본적으로 항상 출력되므로, 제외하려면 반드시 {_id: 0}처럼 명시적으로 설정해야 합니다.
포함과 제외의 혼용: _id 필드를 제외한 나머지 경우에는 포함(true/1)과 제외(false/0)를 동시에 섞어서 지정할 수 없습니다. 즉, 표시할 필드만 true로 지정하거나, 숨길 필드만 false로 지정해야 합니다.
이처럼 find() 메서드와 프로젝션을 활용하면 대량의 데이터 중에서 필요한 정보만 효율적으로 추출할 수 있어, 네트워크 전송량과 애플리케이션 처리 부담을 줄이는 데 큰 도움이 됩니다.