MongoDB에서는 프로젝션(projection)을 활용하면 컬렉션에 저장된 문서 중 원하는 필드만 골라서 조회할 수 있습니다. 이 글에서는 예제를 통해 여러 필드 중 단일 필드만 출력하는 방법을 단계별로 살펴보겠습니다.
1. 샘플 컬렉션 생성 및 문서 삽입
먼저 insertOne() 메서드를 사용해 demo216 컬렉션에 문서들을 생성합니다.
> db.demo216.insertOne({"ClientName":"John","ClientAge":34});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3e351003d395bdc213470c")
}
> db.demo216.insertOne({"ClientName":"Bob","ClientAge":32});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3e351703d395bdc213470d")
}
> db.demo216.insertOne({"ClientName":"Mike","ClientAge":35});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3e351c03d395bdc213470e")
}2. find() 메서드로 전체 문서 확인
find() 메서드를 사용하면 컬렉션의 모든 문서를 확인할 수 있습니다.
> db.demo216.find();
위 쿼리는 다음과 같은 결과를 출력합니다.
{ "_id" : ObjectId("5e3e351003d395bdc213470c"), "ClientName" : "John", "ClientAge" : 34 }
{ "_id" : ObjectId("5e3e351703d395bdc213470d"), "ClientName" : "Bob", "ClientAge" : 32 }
{ "_id" : ObjectId("5e3e351c03d395bdc213470e"), "ClientName" : "Mike", "ClientAge" : 35 }3. 프로젝션으로 단일 필드만 조회하기
이제 ClientName 필드 하나만 조회하는 프로젝션 쿼리를 실행해 보겠습니다. 두 번째 인자로 전달하는 프로젝션 객체에서 제외할 필드(_id, ClientAge)의 값을 0으로 설정하면 됩니다.
> db.demo216.find({},{_id:0,"ClientAge":0});위 쿼리는 다음과 같은 결과를 출력합니다.
{ "ClientName" : "John" }
{ "ClientName" : "Bob" }
{ "ClientName" : "Mike" }정리
MongoDB의 프로젝션 기능을 사용하면 불필요한 데이터를 제외하고 필요한 필드만 효율적으로 가져올 수 있습니다. 참고로 _id 필드는 기본적으로 항상 반환되기 때문에, 위 예제처럼 명시적으로 _id:0으로 지정해 주어야 제외됩니다. 또한 포함 방식(1)과 제외 방식(0)은 하나의 프로젝션 객체에서 혼용할 수 없다는 점도 기억해 두면 좋습니다.