MongoDB $in 연산자로 특정 급여의 직원 이름만 가져오기
직원 컬렉션에서 특정 급여를 받는 직원의 이름만 조회하려면 MongoDB의 $in 연산자를 사용하고, 프로젝션(projection)을 활용해 이름 필드만 반환하면 됩니다.
$in 연산자는 지정한 배열 안의 값과 일치하는 문서를 찾아주는 역할을 하며, 두 번째 인자인 프로젝션 문서를 사용하면 _id나 급여 같은 불필요한 필드를 제외하고 원하는 필드만 출력할 수 있습니다.
1. 샘플 컬렉션 생성하기
먼저 직원 정보가 담긴 문서들로 컬렉션을 생성해 보겠습니다.
> db.demo666.insertOne({"EmployeeName":"John","EmployeeSalary":25000});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea1c04824113ea5458c7d0d")
}
> db.demo666.insertOne({"EmployeeName":"Chris","EmployeeSalary":35000});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea1c05524113ea5458c7d0e")
}
> db.demo666.insertOne({"EmployeeName":"David","EmployeeSalary":65000});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea1c06024113ea5458c7d0f")
}
> db.demo666.insertOne({"EmployeeName":"Carol","EmployeeSalary":40000});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea1c06f24113ea5458c7d10")
}위 코드는 John(25,000), Chris(35,000), David(65,000), Carol(40,000) 네 명의 직원 데이터를 demo666 컬렉션에 삽입합니다.
2. 전체 문서 확인하기
find() 메서드를 사용하면 컬렉션의 모든 문서를 확인할 수 있습니다.
> db.demo666.find();
실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5ea1c04824113ea5458c7d0d"), "EmployeeName" : "John", "EmployeeSalary" : 25000 }
{ "_id" : ObjectId("5ea1c05524113ea5458c7d0e"), "EmployeeName" : "Chris", "EmployeeSalary" : 35000 }
{ "_id" : ObjectId("5ea1c06024113ea5458c7d0f"), "EmployeeName" : "David", "EmployeeSalary" : 65000 }
{ "_id" : ObjectId("5ea1c06f24113ea5458c7d10"), "EmployeeName" : "Carol", "EmployeeSalary" : 40000 }3. $in 연산자로 특정 급여 직원 이름 조회하기
이제 $in 연산자와 프로젝션을 조합하여 급여가 35,000 또는 40,000인 직원의 이름만 조회하는 쿼리를 살펴보겠습니다.
> db.demo666.find({"EmployeeSalary":{$in:[35000,40000]}},{_id:0,"EmployeeSalary":0});쿼리 구조를 자세히 보면:
- {"EmployeeSalary": {$in: [35000, 40000]}} — 급여가 35,000 또는 40,000인 문서만 필터링합니다.
- {_id: 0, "EmployeeSalary": 0} — _id와 EmployeeSalary 필드를 결과에서 제외하여 직원 이름만 표시합니다.
실행 결과는 다음과 같습니다.
{ "EmployeeName" : "Chris" }
{ "EmployeeName" : "Carol" }결과를 보면 지정한 급여(35,000, 40,000)에 해당하는 Chris와 Carol의 이름만 깔끔하게 출력된 것을 확인할 수 있습니다. 이처럼 $in 연산자와 프로젝션을 함께 사용하면 복잡한 조건 검색 시 원하는 데이터만 효율적으로 추출할 수 있습니다.