Computer >> 컴퓨터 >  >> 프로그래밍 >> MongoDB

MongoDB에서 특정 필드만 조회하는 방법 – find() 프로젝션 완벽 가이드

MongoDB에서 컬렉션의 전체 문서가 아닌 특정 필드만 가져오고 싶다면 find() 메서드에 프로젝션(projection)을 사용하면 됩니다. 프로젝션은 쿼리 결과에 포함할 필드(1)와 제외할 필드(0)를 지정하는 기능으로, 불필요한 데이터 전송을 줄여 쿼리 성능을 높일 수 있습니다.

1. 테스트용 컬렉션 생성

먼저 예제에 사용할 컬렉션을 만들고 문서를 삽입해 보겠습니다.

> db.specificFieldDemo.insertOne({"FirstName":"John","LastName":"Doe"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cb8019a623186894665ae31")
}
> db.specificFieldDemo.insertOne({"FirstName":"John","LastName":"Smith"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cb801ab623186894665ae32")
}
> db.specificFieldDemo.insertOne({"FirstName":"David","LastName":"Miller"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cb801b3623186894665ae33")
}
> db.specificFieldDemo.insertOne({"FirstName":"Sam","LastName":"Williams"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cb801bf623186894665ae34")
}

2. 전체 문서 조회하기

find() 메서드를 사용해 컬렉션의 모든 문서를 확인해 보겠습니다.

> db.specificFieldDemo.find().pretty();

위 쿼리를 실행하면 다음과 같이 모든 필드가 포함된 문서가 출력됩니다.

{
   "_id" : ObjectId("5cb8019a623186894665ae31"),
   "FirstName" : "John",
   "LastName" : "Doe"
}
{
   "_id" : ObjectId("5cb801ab623186894665ae32"),
   "FirstName" : "John",
   "LastName" : "Smith"
}
{
   "_id" : ObjectId("5cb801b3623186894665ae33"),
   "FirstName" : "David",
   "LastName" : "Miller"
}
{
   "_id" : ObjectId("5cb801bf623186894665ae34"),
   "FirstName" : "Sam",
   "LastName" : "Williams"
}

3. 특정 필드만 반환하기

이번에는 LastName 필드만 조회해 보겠습니다. 두 번째 인자로 프로젝션 객체를 전달하며, 여기서 _id: 0_id 필드를 제외하겠다는 의미이고, LastName: 1은 해당 필드를 포함하겠다는 의미입니다.

> db.specificFieldDemo.find({},{_id:0,LastName:1});

실행 결과는 다음과 같습니다.

{ "LastName" : "Doe" }
{ "LastName" : "Smith" }
{ "LastName" : "Miller" }
{ "LastName" : "Williams" }

프로젝션 사용 시 주의할 점

  • _id는 기본적으로 항상 포함됩니다. 따라서 _id 필드가 필요 없다면 반드시 _id: 0으로 명시적으로 제외해야 합니다.
  • 포함(1) 방식을 사용할 경우, 지정한 필드 외에는 모두 제외되며 _id만 예외적으로 기본 포함됩니다.
  • 반대로 제외(0) 방식을 사용하면 지정한 필드만 빠지고 나머지 필드가 모두 반환됩니다.
  • 단, 하나의 프로젝션 객체에서 _id를 제외하고는 포함(1)과 제외(0)를 혼합해서 사용할 수 없습니다.

이처럼 MongoDB의 프로젝션을 활용하면 대용량 컬렉션에서도 꼭 필요한 데이터만 효율적으로 조회할 수 있어 네트워크 부담과 응답 시간을 크게 줄일 수 있습니다.