MongoDB에서 id 필드를 숨기고 원하는 필드만 조회하는 방법
MongoDB에서 데이터를 조회할 때 프로젝션(projection)을 활용하면 특정 필드만 선택적으로 표시하거나 숨길 수 있습니다. 이 글에서는 문서에 포함된 id 필드의 값을 숨기고 나머지 정보만 출력하는 방법을 예제와 함께 단계별로 살펴보겠습니다.
1. 컬렉션 생성 및 문서 삽입
먼저 데모용 컬렉션을 만들고 insertOne() 메서드로 문서를 삽입해 보겠습니다.
> db.demo575.insertOne({id:101,Information:{Name:"Chris",Age:21}});{
"acknowledged" : true, "insertedId" : ObjectId("5e916a55581e9acd78b427f7")
}
> db.demo575.insertOne({id:102,Information:{Name:"David",Age:20}});{
"acknowledged" : true, "insertedId" : ObjectId("5e916a5f581e9acd78b427f8")
}
> db.demo575.insertOne({id:101,Information:{Name:"Bob",Age:23}});{
"acknowledged" : true, "insertedId" : ObjectId("5e916a67581e9acd78b427f9")
}2. 전체 문서 조회하기
find() 메서드를 사용하여 컬렉션의 모든 문서를 확인해 보겠습니다.
> db.demo575.find();
위 명령을 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5e916a55581e9acd78b427f7"), "id" : 101, "Information" : { "Name" : "Chris", "Age" : 21 } }
{ "_id" : ObjectId("5e916a5f581e9acd78b427f8"), "id" : 102, "Information" : { "Name" : "David", "Age" : 20 } }
{ "_id" : ObjectId("5e916a67581e9acd78b427f9"), "id" : 101, "Information" : { "Name" : "Bob", "Age" : 23 } }3. id 필드를 숨기고 특정 필드만 표시하기
이제 프로젝션 옵션을 활용하여 id 필드 값을 제외하고 원하는 필드만 표시하는 쿼리를 작성해 보겠습니다. find() 메서드의 두 번째 인자로 {"Information.Name": 1}을 전달하면 조건에 맞는 문서 중 이름 정보만 가져올 수 있습니다.
> db.demo575.find({id:101},{"Information.Name":1});실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5e916a55581e9acd78b427f7"), "Information" : { "Name" : "Chris" } }
{ "_id" : ObjectId("5e916a67581e9acd78b427f9"), "Information" : { "Name" : "Bob" } }참고: _id 필드까지 숨기는 방법
출력 결과를 보면 _id 필드는 여전히 함께 표시되는 것을 확인할 수 있습니다. MongoDB에서는 별도 설정이 없으면 _id 필드가 항상 반환되기 때문입니다. 만약 _id 필드까지 숨기고 싶다면 프로젝션에 {"_id": 0}을 추가하면 됩니다.
> db.demo575.find({id:101},{"_id":0,"Information.Name":1});이처럼 프로젝션을 적절히 활용하면 클라이언트에 필요한 데이터만 전달할 수 있어 응답 크기를 줄이고 보안성도 높일 수 있습니다.