MongoDB에서 여러 매개변수(조건)를 동시에 만족하는 문서를 조회하려면 점(.) 표기법을 활용하면 됩니다. 특히 배열 안에 중첩된 필드나 하위 문서의 값을 조건으로 지정할 때 이 방법이 매우 유용합니다.
1. 테스트용 컬렉션 생성하기
먼저 예제로 사용할 컬렉션을 만들고 문서를 하나 삽입해 보겠습니다. 아래 예제에서는 고객 정보와 그 안에 중첩된 상세 정보(국가, 은행명, 잔액)를 함께 담은 구조를 사용합니다.
> db.multipleParametersDemo.insertOne(
... {
... "CustomerName" : "Larry",
... "CustomerDetails" : [
... {
... "CustomerCountryName" : "US",
... "CustomerBankName" : "HDFC",
... "CustomerBalance" : 17363
... }
... ],
... "Purchase" : 1456
... }
... );
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd10f9ce3526dbddbbfb60a")
}insertOne() 메서드가 정상적으로 실행되면 위와 같이 acknowledged 값이 true로 반환되며, 새로 생성된 문서의 ObjectId도 함께 확인할 수 있습니다.
2. 저장된 문서 확인하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 조회할 수 있습니다. pretty() 메서드를 함께 사용하면 결과가 보기 좋게 정렬되어 출력됩니다.
> db.multipleParametersDemo.find().pretty();
위 쿼리는 다음과 같은 결과를 출력합니다.
{
"_id" : ObjectId("5cd10f9ce3526dbddbbfb60a"),
"CustomerName" : "Larry",
"CustomerDetails" : [
{
"CustomerCountryName" : "US",
"CustomerBankName" : "HDFC",
"CustomerBalance" : 17363
}
],
"Purchase" : 1456
}3. 여러 매개변수로 쿼리하기
이제 고객 이름(CustomerName)과 중첩된 필드인 국가(CustomerDetails.CustomerCountryName)라는 두 가지 조건을 동시에 적용해 문서를 조회해 보겠습니다.
> db.multipleParametersDemo.find({CustomerName: 'Larry', 'CustomerDetails.CustomerCountryName': 'US'}).count();위 쿼리는 두 조건을 모두 만족하는 문서의 개수를 반환하며, 실행 결과는 다음과 같습니다.
1
핵심 정리
- 쿼리 객체 안에 여러 조건을 쉼표(,)로 구분하여 나열하면 AND 조건으로 처리됩니다.
- 중첩된 필드에 접근할 때는 반드시 따옴표로 감싼 점(.) 표기법(예:
'CustomerDetails.CustomerCountryName')을 사용해야 합니다. - count() 메서드를 함께 사용하면 조건에 맞는 문서의 개수를 간편하게 확인할 수 있습니다.
이처럼 점(.) 표기법과 복합 조건 쿼리를 조합하면 MongoDB에서 원하는 데이터를 더욱 정교하게 검색할 수 있습니다.