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

MongoDB 집계(Aggregation)에서 _id 필드를 숨기는 방법

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를 숨기고, UserNameUserCountryName만 출력하는 집계 쿼리를 실행합니다.

> 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 응답이나 리포트 생성 시 내부 식별자를 노출하고 싶지 않을 때 특히 유용합니다.