MongoDB에서 특정 조건에 맞는 문서를 조회하면서 원하는 필드 하나만 가져오고 싶다면, $and 연산자와 프로젝션(projection)을 함께 사용하면 됩니다. 이 글에서는 실제 예제를 통해 그 과정을 단계별로 살펴보겠습니다.
1. 샘플 컬렉션 및 문서 생성하기
먼저 insertOne() 메서드를 사용하여 학생 정보가 담긴 컬렉션을 만들어 보겠습니다.
> db.selectingASingleFieldDemo.insertOne({"StudentFirstName":"John","StudentAge":23,"StudentCountryName":"US"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd547142cba06f46efe9f02")
}
> db.selectingASingleFieldDemo.insertOne({"StudentFirstName":"Carol","StudentAge":21,"StudentCountryName":"UK"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd5471f2cba06f46efe9f03")
}
> db.selectingASingleFieldDemo.insertOne({"StudentFirstName":"David","StudentAge":24,"StudentCountryName":"AUS"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd5472c2cba06f46efe9f04")
}
> db.selectingASingleFieldDemo.insertOne({"StudentFirstName":"Robert","StudentAge":26,"StudentCountryName":"AUS"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd548382cba06f46efe9f05")
}위 코드는 이름, 나이, 국가 정보를 가진 학생 문서 4개를 selectingASingleFieldDemo 컬렉션에 순차적으로 삽입합니다.
2. 전체 문서 조회하기
삽입된 모든 문서를 확인하려면 find() 메서드를 사용합니다. pretty()를 붙이면 결과를 보기 좋게 정렬해서 출력할 수 있습니다.
> db.selectingASingleFieldDemo.find().pretty();
실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.
{
"_id" : ObjectId("5cd547142cba06f46efe9f02"),
"StudentFirstName" : "John",
"StudentAge" : 23,
"StudentCountryName" : "US"
}
{
"_id" : ObjectId("5cd5471f2cba06f46efe9f03"),
"StudentFirstName" : "Carol",
"StudentAge" : 21,
"StudentCountryName" : "UK"
}
{
"_id" : ObjectId("5cd5472c2cba06f46efe9f04"),
"StudentFirstName" : "David",
"StudentAge" : 24,
"StudentCountryName" : "AUS"
}
{
"_id" : ObjectId("5cd548382cba06f46efe9f05"),
"StudentFirstName" : "Robert",
"StudentAge" : 26,
"StudentCountryName" : "AUS"
}3. 조건에 맞는 단일 필드만 선택하기
이제 핵심 부분입니다. 여기서는 두 가지 조건을 동시에 적용해야 하므로 $and 연산자를 사용합니다.
- 조건 1: StudentAge(나이)가 21보다 큰 경우 (
$gt: 21) - 조건 2: StudentCountryName(국가)이 'AUS'인 경우
그리고 세 번째 인수인 프로젝션 부분에서 {StudentFirstName: 1, _id: 0}을 지정하여 학생 이름 필드만 반환하고, 기본으로 포함되는 _id 필드는 제외합니다.
> db.selectingASingleFieldDemo.find(
... { $and:[{StudentAge: { $gt:21 } },
... {"StudentCountryName" : "AUS"}] },
... {StudentFirstName: 1, _id: 0});위 쿼리를 실행하면 다음과 같이 이름 필드만 담긴 결과가 출력됩니다.
{ "StudentFirstName" : "David" }
{ "StudentFirstName" : "Robert" }정리
MongoDB에서 단일 필드만 선택하는 방법을 요약하면 다음과 같습니다.
find()메서드의 첫 번째 인수에$and연산자로 복합 조건을 지정합니다.- 두 번째 인수(프로젝션)에 가져올 필드는
1, 제외할 필드는0으로 설정합니다. _id는 기본적으로 항상 반환되므로, 필요 없다면 반드시_id: 0으로 명시적으로 제외해야 합니다.
이처럼 프로젝션을 활용하면 불필요한 데이터 전송을 줄여 애플리케이션 성능을 개선할 수 있습니다.