MongoDB 프로젝션으로 특정 필드 숨기기
MongoDB에서 쿼리 결과에 특정 필드 이름만 표시하고 나머지는 숨기고 싶다면, 프로젝션(projection) 기능을 활용하면 됩니다. 숨기려는 필드의 값을 0으로 설정하면 해당 필드가 결과에서 제외되고, 기본적으로 항상 포함되는 _id만 남게 됩니다.
1. 샘플 컬렉션 생성하기
먼저 테스트용 컬렉션을 만들고 문서를 삽입해 보겠습니다.
> db.demo650.insertOne({_id:101,details:{Name:"Chris",Age:21}});
{ "acknowledged" : true, "insertedId" : 101 }
> db.demo650.insertOne({_id:102,details:{Name:"Bob",Age:22}});
{ "acknowledged" : true, "insertedId" : 102 }
> db.demo650.insertOne({_id:103,details:{Name:"Sam",Age:20}});
{ "acknowledged" : true, "insertedId" : 103 }
> db.demo650.insertOne({_id:104,details:{Name:"Robert",Age:24}});
{ "acknowledged" : true, "insertedId" : 104 }2. find() 메서드로 전체 문서 확인하기
find() 메서드를 사용하면 컬렉션의 모든 문서를 확인할 수 있습니다.
> db.demo650.find();
위 명령은 다음과 같은 출력 결과를 반환합니다.
{ "_id" : 101, "details" : { "Name" : "Chris", "Age" : 21 } }
{ "_id" : 102, "details" : { "Name" : "Bob", "Age" : 22 } }
{ "_id" : 103, "details" : { "Name" : "Sam", "Age" : 20 } }
{ "_id" : 104, "details" : { "Name" : "Robert", "Age" : 24 } }3. 프로젝션으로 details 필드 숨기기
이제 details 필드를 숨기고 _id만 표시해 보겠습니다. 두 번째 인자로 전달하는 프로젝션 객체에서 details 값을 0으로 설정하면 됩니다.
> db.demo650.find({},{details:0});실행 결과는 다음과 같습니다.
{ "_id" : 101 }
{ "_id" : 102 }
{ "_id" : 103 }
{ "_id" : 104 }핵심 정리
- 프로젝션에서 필드 값을
0으로 설정하면 해당 필드가 결과에서 제외(숨김)됩니다. - 반대로
1로 설정하면 지정한 필드만 포함됩니다. _id필드는 별도로 설정하지 않아도 기본적으로 항상 출력되며, 이마저도 숨기려면{_id: 0}을 함께 지정하면 됩니다.
이처럼 MongoDB의 프로젝션 기능을 활용하면 대량의 데이터에서 필요한 정보만 효율적으로 추출할 수 있어 네트워크 부하 감소와 성능 최적화에 큰 도움이 됩니다.