MongoDB에서 조회 결과에 항상 함께 출력되는 _id 필드는 기본 키 역할을 하기 때문에 별도 설정 없이는 자동으로 포함됩니다. 하지만 결과에서 _id를 제외하고 싶다면 프로젝션(projection) 옵션에서 해당 필드 값을 0으로 설정하면 됩니다.
_id 제거 기본 문법
db.yourCollectionName.find({},{_id:0});find() 메서드의 두 번째 인자인 프로젝션 객체에 {_id: 0}을 지정하면 조회 결과에서 _id 필드가 제외됩니다.
예제 컬렉션 생성하기
실제 동작을 확인하기 위해 먼저 문서를 포함하는 컬렉션을 생성해 보겠습니다.
> db.removeIdDemo.insertOne({"UserName":"John","UserAge":23});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c9bb4042d66697741252440")
}
> db.removeIdDemo.insertOne({"UserName":"Mike","UserAge":27});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c9bb40c2d66697741252441")
}
> db.removeIdDemo.insertOne({"UserName":"Sam","UserAge":34});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c9bb4162d66697741252442")
}
> db.removeIdDemo.insertOne({"UserName":"Carol","UserAge":29});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c9bb4222d66697741252443")
}find()로 전체 문서 조회하기
find() 메서드를 사용해 컬렉션의 모든 문서를 조회하면 다음과 같이 각 문서마다 _id 필드가 함께 출력됩니다.
> db.removeIdDemo.find().pretty();
위 쿼리의 실행 결과입니다.
{
"_id" : ObjectId("5c9bb4042d66697741252440"),
"UserName" : "John",
"UserAge" : 23
}
{
"_id" : ObjectId("5c9bb40c2d66697741252441"),
"UserName" : "Mike",
"UserAge" : 27
}
{
"_id" : ObjectId("5c9bb4162d66697741252442"),
"UserName" : "Sam",
"UserAge" : 34
}
{
"_id" : ObjectId("5c9bb4222d66697741252443"),
"UserName" : "Carol",
"UserAge" : 29
}_id를 제외한 조회 결과 얻기
이제 프로젝션 옵션에 {_id: 0}을 설정하여 _id 필드를 제거한 결과를 조회해 보겠습니다.
> db.removeIdDemo.find({},{_id:0});실행 결과 _id 필드 없이 나머지 필드만 깔끔하게 출력되는 것을 확인할 수 있습니다.
{ "UserName" : "John", "UserAge" : 23 }
{ "UserName" : "Mike", "UserAge" : 27 }
{ "UserName" : "Sam", "UserAge" : 34 }
{ "UserName" : "Carol", "UserAge" : 29 }참고 사항
프로젝션 사용 시 주의할 점은 _id를 제외한 다른 필드들은 포함(1)과 제외(0)를 혼합해서 지정할 수 없다는 것입니다. 예를 들어 {UserName: 1, UserAge: 0}처럼 지정하면 오류가 발생합니다. 반면 _id만큼은 유일하게 다른 필드와 조합하여 자유롭게 제외 설정이 가능합니다. 즉, {UserName: 1, _id: 0}과 같이 사용하면 UserName 필드만 포함하면서 _id는 제외할 수 있습니다.