MongoDB 집계에서 _id 필드 숨기기
MongoDB의 aggregate() 파이프라인을 사용하다 보면 기본적으로 함께 출력되는 _id 필드가 불필요한 경우가 많습니다. 이때 $project 단계에서 해당 필드의 값을 0으로 설정하면 결과에서 _id를 제외할 수 있습니다.
기본 문법
db.yourCollectionName.aggregate(
{$project : {
_id : 0 ,
yourIncludeFieldName:1,
yourIncludeFieldName:1
}}
).pretty();$project 단계에서 포함하고 싶은 필드는 1, 제외하고 싶은 필드는 0으로 지정합니다. 특별히 _id : 0으로 명시하지 않으면 _id는 항상 자동으로 출력되므로 반드시 직접 비활성화해 주어야 합니다.
예제 컬렉션 생성
문법을 실제로 확인하기 위해 샘플 문서가 담긴 컬렉션을 먼저 만들어 보겠습니다. 아래 쿼리로 컬렉션에 문서를 삽입합니다.
> db.hideidDemo.insertOne({"UserName":"Larry","UserAge":23,"UserCountryName":"US"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c92b02336de59bd9de06392")
}
> db.hideidDemo.insertOne({"UserName":"Chris","UserAge":21,"UserCountryName":"AUS"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c92b03036de59bd9de06393")
}
> db.hideidDemo.insertOne({"UserName":"Robert","UserAge":26,"UserCountryName":"UK"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c92b04036de59bd9de06394")
}저장된 전체 문서 조회
find() 메서드를 사용해 컬렉션의 모든 문서를 출력해 보겠습니다.
> db.hideidDemo.find().pretty();
실행 결과는 다음과 같습니다. 각 문서마다 _id 필드가 함께 표시되는 것을 확인할 수 있습니다.
{
"_id" : ObjectId("5c92b02336de59bd9de06392"),
"UserName" : "Larry",
"UserAge" : 23,
"UserCountryName" : "US"
}
{
"_id" : ObjectId("5c92b03036de59bd9de06393"),
"UserName" : "Chris",
"UserAge" : 21,
"UserCountryName" : "AUS"
}
{
"_id" : ObjectId("5c92b04036de59bd9de06394"),
"UserName" : "Robert",
"UserAge" : 26,
"UserCountryName" : "UK"
}_id를 제외한 집계 쿼리 실행
이제 $project 단계에서 _id : 0을 지정하여 _id를 숨기고, UserName과 UserCountryName만 출력하는 집계 쿼리를 실행합니다.
> db.hideidDemo.aggregate(
... {$project : {
... _id : 0 ,
... UserName:1,
... UserCountryName:1
... }}
... ).pretty();실행 결과는 다음과 같습니다. _id 필드 없이 원하는 필드만 깔끔하게 출력됩니다.
{ "UserName" : "Larry", "UserCountryName" : "US" }
{ "UserName" : "Chris", "UserCountryName" : "AUS" }
{ "UserName" : "Robert", "UserCountryName" : "UK" }정리
MongoDB 집계 결과에서 _id를 숨기는 방법은 매우 간단합니다. $project 단계 안에서 _id : 0만 추가하면 되며, 나머지 출력할 필드에는 1을 지정하면 됩니다. 이 방식은 API 응답이나 리포트 생성 시 내부 식별자를 노출하고 싶지 않을 때 특히 유용합니다.