관계형 데이터베이스에서 자주 사용하는 SELECT column1, column2 FROM tbl 쿼리는 테이블에서 원하는 컬럼만 골라 조회하는 기능입니다. MongoDB에서는 find() 메서드의 두 번째 인자인 프로젝션(projection)을 사용하여 동일한 결과를 얻을 수 있습니다.
기본 구문
MongoDB에서 특정 필드만 조회하는 기본 구문은 다음과 같습니다.
db.yourCollectionName.find({}, { _id: 1, "column1": 1, "column2": 1 }).pretty();여기서 첫 번째 {}는 조회 조건(필터)을 의미하며, 비워두면 모든 문서를 대상으로 합니다. 두 번째 객체에서 값이 1인 필드만 결과에 포함됩니다.
예제용 컬렉션 생성
구문을 이해하기 위해 실제 문서가 담긴 컬렉션을 먼저 만들어 보겠습니다. 아래 쿼리로 컬렉션에 문서를 삽입할 수 있습니다.
> db.equivalentForSelectColumn1Column2Demo.insertOne({"CustomerName":"John","CustomerAge":26,"CustomerCountryName":"US"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c92c6205259fcd19549980a")
}
> db.equivalentForSelectColumn1Column2Demo.insertOne({"CustomerName":"David","CustomerAge":22,"CustomerCountryName":"AUS"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c92c6305259fcd19549980b")
}
> db.equivalentForSelectColumn1Column2Demo.insertOne({"CustomerName":"Chris","CustomerAge":24,"CustomerCountryName":"UK"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c92c6415259fcd19549980c")
}전체 문서 조회하기
find() 메서드를 사용하면 컬렉션의 모든 문서를 확인할 수 있습니다.
> db.equivalentForSelectColumn1Column2Demo.find().pretty();
실행 결과는 다음과 같습니다.
{
"_id" : ObjectId("5c92c6205259fcd19549980a"),
"CustomerName" : "John",
"CustomerAge" : 26,
"CustomerCountryName" : "US"
}
{
"_id" : ObjectId("5c92c6305259fcd19549980b"),
"CustomerName" : "David",
"CustomerAge" : 22,
"CustomerCountryName" : "AUS"
}
{
"_id" : ObjectId("5c92c6415259fcd19549980c"),
"CustomerName" : "Chris",
"CustomerAge" : 24,
"CustomerCountryName" : "UK"
}특정 필드만 조회하기 (SELECT에 해당)
이제 SQL의 SELECT CustomerName, CustomerAge FROM tbl에 해당하는 MongoDB 쿼리를 살펴보겠습니다. 프로젝션에서 원하는 필드에 1을 지정하면 됩니다.
> db.equivalentForSelectColumn1Column2Demo.find({}, {"CustomerName": 1, "CustomerAge": 1}).pretty();실행 결과는 다음과 같습니다.
{
"_id" : ObjectId("5c92c6205259fcd19549980a"),
"CustomerName" : "John",
"CustomerAge" : 26
}
{
"_id" : ObjectId("5c92c6305259fcd19549980b"),
"CustomerName" : "David",
"CustomerAge" : 22
}
{
"_id" : ObjectId("5c92c6415259fcd19549980c"),
"CustomerName" : "Chris",
"CustomerAge" : 24
}결과를 보면 지정한 필드 외에 _id 필드가 함께 출력되는 것을 확인할 수 있습니다. MongoDB는 별도 설정이 없으면 기본적으로 _id를 항상 반환하기 때문입니다.
_id 필드 제외하기
_id 필드를 결과에서 제외하고 싶다면 프로젝션에서 해당 필드의 값을 0으로 설정하면 됩니다.
> db.equivalentForSelectColumn1Column2Demo.find({}, {_id: 0, "CustomerName": 1, "CustomerAge": 1}).pretty();실행 결과는 다음과 같습니다.
{ "CustomerName" : "John", "CustomerAge" : 26 }
{ "CustomerName" : "David", "CustomerAge" : 22 }
{ "CustomerName" : "Chris", "CustomerAge" : 24 }정리
MongoDB에서 SQL의 SELECT 절에 해당하는 기능은 find()의 프로젝션입니다. 포함할 필드에는 1, 제외할 필드에는 0을 지정하며, 단 _id만은 명시적으로 0을 지정해야 제외됩니다. 이를 활용하면 필요한 데이터만 효율적으로 조회할 수 있습니다.