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

MongoDB 집계 프레임워크에서 _id 필드만 제외하는 방법 ($project 활용)

MongoDB 집계 프레임워크에서 _id 필드만 제외하는 방법

MongoDB에서 쿼리 결과를 조회하면 _id 필드는 기본적으로 항상 함께 반환됩니다. 하지만 집계 프레임워크의 $project 연산자를 활용하면 원하는 필드만 선택하거나, 반대로 _id만 제외하고 나머지 필드는 그대로 유지할 수 있습니다. 이 글에서는 실제 예제를 통해 그 과정을 단계별로 살펴보겠습니다.

1단계: 샘플 컬렉션 생성하기

먼저 학생 정보가 담긴 문서들로 컬렉션을 생성합니다.

> db.excludeIdDemo.insertOne({"StudentFirstName":"John","StudentAge":21});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cd701a56d78f205348bc632")
}
> db.excludeIdDemo.insertOne({"StudentFirstName":"Robert","StudentAge":20});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cd701af6d78f205348bc633")
}
> db.excludeIdDemo.insertOne({"StudentFirstName":"Chris","StudentAge":24});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cd701b86d78f205348bc634")
}

2단계: find()로 전체 문서 확인하기

find() 메서드를 사용하면 컬렉션의 모든 문서를 조회할 수 있습니다.

> db.excludeIdDemo.find();

실행 결과는 다음과 같습니다. 각 문서마다 _id 필드가 자동으로 포함되어 있는 것을 확인할 수 있습니다.

{ "_id" : ObjectId("5cd701a56d78f205348bc632"), "StudentFirstName" : "John", "StudentAge" : 21 }
{ "_id" : ObjectId("5cd701af6d78f205348bc633"), "StudentFirstName" : "Robert", "StudentAge" : 20 }
{ "_id" : ObjectId("5cd701b86d78f205348bc634"), "StudentFirstName" : "Chris", "StudentAge" : 24 }

3단계: $project로 _id 제외하기

집계 프레임워크의 $project 단계에서 _id : 0을 지정하면 해당 필드를 결과에서 제외할 수 있습니다. 아래 예제는 _id를 제외하면서 StudentFirstName 필드만 포함시키는 쿼리입니다.

> db.excludeIdDemo.aggregate(
   {
      $project :
      {
         _id : 0,
         "StudentFirstName": 1
      }
   }
);

쿼리를 실행하면 다음과 같이 _id 없이 깔끔한 결과를 얻을 수 있습니다.

{ "StudentFirstName" : "John" }
{ "StudentFirstName" : "Robert" }
{ "StudentFirstName" : "Chris" }

추가 팁: 모든 필드를 유지한 채 _id만 제거하기

$project에서 포함(1) 지정 없이 _id : 0만 단독으로 작성하면, 나머지 모든 필드는 그대로 유지되고 _id만 제외됩니다.

> db.excludeIdDemo.aggregate(
   { $project : { _id : 0 } }
);

또한 MongoDB 4.4 이상 버전에서는 전용 $unset 스테이지를 사용해 더욱 직관적으로 필드를 제거할 수도 있습니다.

> db.excludeIdDemo.aggregate(
   { $unset : ["_id"] }
);

정리

- $project에서 _id : 0을 지정하면 결과에서 _id가 제외됩니다.
- 포함 모드(필드명: 1)를 사용할 때도 _id는 기본적으로 포함되므로, 반드시 명시적으로 0으로 설정해야 합니다.
- _id : 0만 단독으로 지정하면 다른 모든 필드는 유지됩니다.
- MongoDB 4.4 이상에서는 $unset 스테이지로도 동일한 작업이 가능합니다.