MongoDB 단일 필드 쿼리 개요
MongoDB에서 특정 필드 하나만 조회하고 싶다면 find() 메서드에 프로젝션(projection) 옵션을 활용하면 됩니다. 프로젝션을 사용하면 컬렉션의 모든 문서 중에서 원하는 필드만 선택적으로 출력할 수 있어, 불필요한 데이터 전송을 줄이고 쿼리 성능을 높일 수 있습니다.
먼저 예제로 사용할 컬렉션을 생성하고 문서를 삽입해 보겠습니다.
1. 컬렉션 생성 및 문서 삽입
> db.demo10.insertOne({"StudentId":101,"StudentName":"Chris"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e0f68a7d7df943a7cec4f9b")
}
> db.demo10.insertOne({"StudentId":102,"StudentName":"David"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e0f68afd7df943a7cec4f9c")
}
> db.demo10.insertOne({"StudentId":103,"StudentName":"Bob"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e0f68b5d7df943a7cec4f9d")
}위 코드는 demo10이라는 컬렉션에 학생 정보 세 건을 차례대로 삽입합니다. 각 문서는 StudentId와 StudentName 두 개의 필드를 가지고 있습니다.
2. find()로 전체 문서 조회하기
find() 메서드를 인자 없이 실행하면 컬렉션의 모든 문서를 확인할 수 있습니다.
> db.demo10.find();
실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5e0f68a7d7df943a7cec4f9b"), "StudentId" : 101, "StudentName" : "Chris" }
{ "_id" : ObjectId("5e0f68afd7df943a7cec4f9c"), "StudentId" : 102, "StudentName" : "David" }
{ "_id" : ObjectId("5e0f68b5d7df943a7cec4f9d"), "StudentId" : 103, "StudentName" : "Bob" }기본적으로 _id 필드를 포함한 모든 필드가 함께 출력되는 것을 확인할 수 있습니다.
3. 프로젝션으로 단일 필드만 조회하기
이제 StudentName 필드 하나만 조회해 보겠습니다. 두 번째 인자인 프로젝션 객체에서 제외할 필드에는 0, 포함할 필드에는 1을 지정합니다. 아래 예제에서는 _id와 StudentId를 제외(0)하여 결과적으로 StudentName만 남깁니다.
> db.demo10.find({},{"_id":0,"StudentId":0});실행 결과는 다음과 같습니다.
{ "StudentName" : "Chris" }
{ "StudentName" : "David" }
{ "StudentName" : "Bob" }정리
find()의 첫 번째 인자는 조회 조건(query filter)이고, 두 번째 인자는 출력할 필드를 결정하는 프로젝션입니다. 조건은 비워두고({}) 프로젝션만 지정하면 컬렉션 전체 문서에서 원하는 필드만 추출할 수 있습니다. 참고로 _id 필드는 명시적으로 0으로 설정하지 않으면 항상 기본 출력되므로, 이를 제외하려면 반드시 "_id": 0을 지정해야 한다는 점을 기억해 두세요.