MongoDB에서 AND와 OR 조건을 결합하는 방법
MongoDB에서는 $and 연산자와 $or 연산자를 중첩하여 사용함으로써 더욱 정교하고 복잡한 조건의 데이터를 조회할 수 있습니다. 이 글에서는 두 연산자를 결합한 쿼리를 실제 예제와 함께 단계별로 살펴보겠습니다.
1단계: 테스트용 컬렉션 생성
먼저 insertOne() 메서드를 사용하여 문서가 포함된 컬렉션을 생성합니다. 여기서는 학생 이름, 나이, 기술 스택 정보를 가진 세 개의 문서를 삽입합니다.
>db.combinedAndOrDemo.insertOne({"StudentFirstName":"John","StudentAge":23,"StudentSkill":"MongoDB"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd306dcb64f4b851c3a13e2")
}
>db.combinedAndOrDemo.insertOne({"StudentFirstName":"Larry","StudentAge":21,"StudentSkill":"MySQL"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd306f3b64f4b851c3a13e3")
}
>db.combinedAndOrDemo.insertOne({"StudentFirstName":"Sam","StudentAge":24,"StudentSkill":"SQL Server"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd30701b64f4b851c3a13e4")
}2단계: 저장된 전체 문서 확인
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 조회할 수 있으며, pretty()를 함께 사용하면 결과를 보기 좋게 정렬하여 출력합니다.
> db.combinedAndOrDemo.find().pretty();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{
"_id" : ObjectId("5cd306dcb64f4b851c3a13e2"),
"StudentFirstName" : "John",
"StudentAge" : 23,
"StudentSkill" : "MongoDB"
}
{
"_id" : ObjectId("5cd306f3b64f4b851c3a13e3"),
"StudentFirstName" : "Larry",
"StudentAge" : 21,
"StudentSkill" : "MySQL"
}
{
"_id" : ObjectId("5cd30701b64f4b851c3a13e4"),
"StudentFirstName" : "Sam",
"StudentAge" : 24,
"StudentSkill" : "SQL Server"
}3단계: AND와 OR 조건을 결합한 쿼리 실행
$or 배열 안에 $and 조건을 중첩시키면 '여러 조건이 동시에 만족되거나(AND), 그중 하나라도 만족되는(OR)' 형태의 유연한 검색이 가능합니다. 아래 예제는 '이름이 John이면서 특정 _id를 가진 문서' 또는 '기술이 MongoDB인 문서'를 조회하는 쿼리입니다.
> db.combinedAndOrDemo.find( {"$or":[ {"$and": [{"StudentFirstName": "John"}, {"_id": ObjectId("5cd306dcb64f4b851c3a13e2")}] }, {"StudentSkill" : "MongoDB" } ] } );위 쿼리를 실행하면 두 조건 중 하나라도 충족하는 문서가 반환됩니다.
{ "_id" : ObjectId("5cd306dcb64f4b851c3a13e2"), "StudentFirstName" : "John", "StudentAge" : 23, "StudentSkill" : "MongoDB" }정리
이처럼 MongoDB에서는 $and와 $or 연산자를 자유롭게 중첩하여 SQL의 복합 WHERE 절과 유사한 논리 구조를 구현할 수 있습니다. 조건이 많아질수록 괄호 구조를 명확히 유지하는 것이 쿼리 가독성과 유지보수에 큰 도움이 됩니다.