MongoDB find()에서 _id 필드 제외하기
네, MongoDB의 find() 함수에서 프로젝션(projection) 문법을 사용하면 _id 필드를 손쉽게 제외할 수 있습니다. MongoDB는 기본적으로 모든 쿼리 결과에 _id 필드를 포함하지만, 두 번째 인자에 { _id: 0 }을 지정하면 이를 숨길 수 있습니다.
기본 문법
db.컬렉션명.find({}, { _id: 0 });예제 컬렉션 생성
먼저 테스트용 컬렉션을 만들고 문서를 삽입해 보겠습니다.
> db.excludeIdDemo.insertOne({"CustomerName":"Larry"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd7f62c1a844af18acdffb9")
}
> db.excludeIdDemo.insertOne({"CustomerName":"Chris"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd7f6311a844af18acdffba")
}
> db.excludeIdDemo.insertOne({"CustomerName":"Mike"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd7f6351a844af18acdffbb")
}
> db.excludeIdDemo.insertOne({"CustomerName":"Bob"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd7f6381a844af18acdffbc")
}find() 기본 조회 결과 확인
아래와 같이 find() 메서드를 사용하면 컬렉션의 모든 문서가 조회됩니다.
> db.excludeIdDemo.find().pretty();
실행 결과는 다음과 같습니다. 각 문서에 _id 필드가 자동으로 포함되어 있는 것을 확인할 수 있습니다.
{ "_id" : ObjectId("5cd7f62c1a844af18acdffb9"), "CustomerName" : "Larry" }
{ "_id" : ObjectId("5cd7f6311a844af18acdffba"), "CustomerName" : "Chris" }
{ "_id" : ObjectId("5cd7f6351a844af18acdffbb"), "CustomerName" : "Mike" }
{ "_id" : ObjectId("5cd7f6381a844af18acdffbc"), "CustomerName" : "Bob" }_id 필드를 제외한 조회 방법
이제 프로젝션 옵션에 { _id: 0 }을 추가하여 _id 필드를 제외해 보겠습니다.
> db.excludeIdDemo.find({}, { _id: 0 });실행 결과는 다음과 같습니다. _id 없이 원하는 필드만 깔끔하게 출력됩니다.
{ "CustomerName" : "Larry" }
{ "CustomerName" : "Chris" }
{ "CustomerName" : "Mike" }
{ "CustomerName" : "Bob" }추가 팁: 특정 필드만 선택적으로 조회하기
프로젝션은 _id 제외 외에도 활용 범위가 넓습니다. 예를 들어 특정 필드만 가져오려면 해당 필드에 1을 지정하면 됩니다.
> db.excludeIdDemo.find({}, { CustomerName: 1, _id: 0 });참고로 MongoDB 프로젝션에는 한 가지 규칙이 있습니다. _id를 제외한 나머지 필드는 포함(1)과 제외(0)를 섞어서 사용할 수 없으며, 둘 중 하나의 방식만 사용해야 합니다. 유일한 예외가 바로 _id 필드입니다.