MongoDB에서 $or 연산자를 사용하면 여러 조건 중 하나라도 만족하는 문서를 손쉽게 조회할 수 있습니다. 이 글에서는 실제 예제를 통해 $or 연산자로 나이(Age), 점수(Marks), 상태(status) 등 다양한 조건을 결합하여 원하는 문서만 가져오는 방법을 단계별로 살펴보겠습니다.
1. 샘플 컬렉션 생성하기
먼저 insertOne() 메서드를 사용하여 문서가 포함된 컬렉션을 생성하겠습니다.
> db.demo711.insertOne({Name:"John","Marks":75,Age:21,status:"Active"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea85c215d33e20ed1097b7e")
}
> db.demo711.insertOne({Name:"Chris","Marks":55,Age:22,status:"Active"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea85c2c5d33e20ed1097b7f")
}
> db.demo711.insertOne({Name:"Bob","Marks":45,Age:20,status:"Inactive"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea85c3e5d33e20ed1097b80")
}
> db.demo711.insertOne({Name:"David","Marks":85,Age:23,status:"Active"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea85c775d33e20ed1097b81")
}위 코드는 총 4개의 문서를 가진 demo711 컬렉션을 생성합니다. 각 문서는 이름, 점수, 나이, 상태 정보를 포함하고 있습니다.
2. find()로 전체 문서 확인하기
find() 메서드를 사용하면 컬렉션의 모든 문서를 한눈에 확인할 수 있습니다.
> db.demo711.find();
이 명령은 다음과 같은 결과를 출력합니다.
{ "_id" : ObjectId("5ea85c215d33e20ed1097b7e"), "Name" : "John", "Marks" : 75, "Age" : 21, "status" : "Active" }
{ "_id" : ObjectId("5ea85c2c5d33e20ed1097b7f"), "Name" : "Chris", "Marks" : 55, "Age" : 22, "status" : "Active" }
{ "_id" : ObjectId("5ea85c3e5d33e20ed1097b80"), "Name" : "Bob", "Marks" : 45, "Age" : 20, "status" : "Inactive" }
{ "_id" : ObjectId("5ea85c775d33e20ed1097b81"), "Name" : "David", "Marks" : 85, "Age" : 23, "status" : "Active" }3. $or 연산자로 여러 조건 조회하기
다음은 $or 연산자를 활용한 MongoDB 쿼리입니다. 이 쿼리는 아래 세 가지 조건 중 하나라도 충족하는 문서를 모두 반환합니다.
- Age(나이)가 23 이상인 경우 (
$gte: 23) - Marks(점수)가 80 초과인 경우 (
$gt: 80) - status(상태)가 'Inactive'인 경우
> db.demo711.find( { $or: [ { Age: {$gte:23}}, {Marks:{$gt:80} }, {status: 'Inactive'} ] }) ;쿼리 실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5ea85c3e5d33e20ed1097b80"), "Name" : "Bob", "Marks" : 45, "Age" : 20, "status" : "Inactive" }
{ "_id" : ObjectId("5ea85c775d33e20ed1097b81"), "Name" : "David", "Marks" : 85, "Age" : 23, "status" : "Active" }결과 분석
출력 결과를 자세히 보면 그 이유를 알 수 있습니다. Bob은 나이(20)와 점수(45) 조건은 만족하지 않지만 status가 'Inactive'이므로 세 번째 조건에 해당되어 조회되었습니다. 반면 David는 Age가 23으로 첫 번째 조건을, Marks가 85로 두 번째 조건을 동시에 만족하기 때문에 결과에 포함되었습니다. John과 Chris는 어떤 조건도 충족하지 못해 제외되었습니다.
즉, $or 연산자는 조건 배열 중 최소 하나만 일치하면 해당 문서를 결과에 포함시키며, SQL의 OR 절과 유사한 역할을 합니다.
마무리
$or 연산자는 복잡한 검색 조건을 유연하게 구성할 때 매우 유용합니다. $gte, $gt 같은 비교 연산자와 함께 사용하면 숫자 범위 조건과 문자열 일치 조건을 자유롭게 조합할 수 있어, 실무에서 다양한 필터링 시나리오에 활용할 수 있습니다.