MongoDB의 $or 연산자는 두 개 이상의 표현식 배열에 대해 논리 OR 연산을 수행합니다. 즉, 배열 안의 조건 중 하나라도 참이면 해당 문서가 결과에 포함됩니다. 복잡한 검색 조건을 처리할 때 매우 유용하게 활용됩니다.
이 글에서는 실제 예제를 통해 $or 연산자의 기본 문법과 사용 방법을 단계별로 살펴보겠습니다.
1. 샘플 컬렉션 생성 및 문서 삽입
먼저 insertOne() 메서드를 사용해 demo674 컬렉션에 테스트용 문서들을 생성합니다.
> db.demo674.insertOne({Name:"Chris",Age:21});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea3f33604263e90dac943eb")
}
> db.demo674.insertOne({Name:"David",Age:23});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea3f33c04263e90dac943ec")
}
> db.demo674.insertOne({Name:"Bob",Age:21});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea3f34204263e90dac943ed")
}
> db.demo674.insertOne({Name:"John",Age:24});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea3f34804263e90dac943ee")
}위 명령을 실행하면 이름(Name)과 나이(Age) 필드를 가진 네 개의 문서가 컬렉션에 저장됩니다.
2. find() 메서드로 전체 문서 확인
삽입된 모든 문서를 확인하려면 find() 메서드를 사용합니다.
> db.demo674.find();
실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5ea3f33604263e90dac943eb"), "Name" : "Chris", "Age" : 21 }
{ "_id" : ObjectId("5ea3f33c04263e90dac943ec"), "Name" : "David", "Age" : 23 }
{ "_id" : ObjectId("5ea3f34204263e90dac943ed"), "Name" : "Bob", "Age" : 21 }
{ "_id" : ObjectId("5ea3f34804263e90dac943ee"), "Name" : "John", "Age" : 24 }총 4개의 문서가 정상적으로 저장된 것을 확인할 수 있습니다.
3. $or 연산자로 조건부 문서 조회
이제 $or 연산자를 사용해 이름이 "David"이거나 나이가 21인 문서만 조회해 보겠습니다.
> db.demo674.find({$or:[{Name:"David"},{Age:21}]});실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5ea3f33604263e90dac943eb"), "Name" : "Chris", "Age" : 21 }
{ "_id" : ObjectId("5ea3f33c04263e90dac943ec"), "Name" : "David", "Age" : 23 }
{ "_id" : ObjectId("5ea3f34204263e90dac943ed"), "Name" : "Bob", "Age" : 21 }결과 분석
조회 결과에서 주목할 점은 다음과 같습니다.
- Chris(나이 21)와 Bob(나이 21)은 두 번째 조건
{Age:21}에 일치하여 포함되었습니다. - David는 첫 번째 조건
{Name:"David"}에 일치하여 포함되었습니다. - John(나이 24)은 두 조건 중 어느 것에도 해당하지 않아 결과에서 제외되었습니다.
이처럼 $or 연산자는 여러 조건 중 하나라도 만족하는 문서를 반환하므로, SQL의 WHERE ... OR ... 절과 유사한 역할을 한다고 이해하면 쉽습니다.
$or 연산자 사용 시 참고 사항
- $or 연산자는 반드시 배열 형태로 조건식을 전달해야 합니다.
- 배열 내 조건은 두 개 이상이어야 하며, 각 조건은 서로 다른 필드를 대상으로 할 수도 있습니다.
- 동일한 필드에 대한 OR 조건이라면
$in연산자를 사용하는 것이 더 효율적일 수 있습니다. - 인덱스가 설정된 경우 MongoDB는 각 조건에 맞는 인덱스를 활용해 성능을 최적화합니다.