$or
$or
$or
연산자는 하나 이상의<expressions>
배열에 대해 논리OR
연산을 수행하고<expressions>
중 최소 하나 이상을 충족하는 문서를 선택합니다.
호환성
다음 환경에서 호스팅되는 배포에 $or
사용할 수 있습니다.
MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스
MongoDB Enterprise: MongoDB의 구독 기반 자체 관리 버전
MongoDB Community: MongoDB의 소스 사용 가능 무료 자체 관리 버전
구문
$or
연산자의 구문은 다음과 같습니다.
{ $or: [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] }
다음 예를 고려하십시오.
db.inventory.find( { $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] } )
이 쿼리는 inventory
collection에서 quantity
필드 값이 20
보다 작거나 price
필드 값이 와 10
같은 모든 문서를 선택합니다.
동작
$or
조항 및 색인
$or
식의 절을 평가할 때, MongoDB는 collection 스캔을 수행하거나, 모든 절이 인덱스에서 지원되는 경우 인덱스 스캔을 수행합니다. 즉, MongoDB가 인덱스를 사용하여 $or
표현식을 평가하려면 $or
표현식의 모든 절이 인덱스에서 지원되어야 합니다. 그렇지 않으면 MongoDB가 collection 스캔을 수행합니다.
$or
쿼리와 함께 인덱스를 사용하는 경우 $or
의 각 절은 자체 인덱스를 사용할 수 있습니다. 다음 쿼리를 고려해 보세요.
db.inventory.find( { $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] } )
복합 인덱스 대신 이 쿼리를 지원하려면 quantity
에 인덱스 하나를 만들고 price
에 또 다른 인덱스를 만듭니다.
db.inventory.createIndex( { quantity: 1 } ) db.inventory.createIndex( { price: 1 } )
$or
및 text
쿼리
$or
에 $text
쿼리가 포함된 경우 $or
배열의 모든 절이 인덱스에서 지원되어야 합니다. 이는 $text
쿼리가 인덱스를 사용해야 하고 모든 절이 인덱스에서 지원되는 경우에만 $or
가 인덱스를 사용할 수 있기 때문입니다. $text
쿼리가 인덱스를 사용할 수 없는 경우 쿼리는 오류를 반환합니다.
참고
$text
이 페이지에서는 자체 관리형(Atlas에서 관리하지 않는) 배포를 위한 일반 텍스트 쿼리 기능을 제공합니다. MongoDB Atlas에서 호스팅되는 데이터의 경우 MongoDB는 향상된 전체 텍스트 쿼리 솔루션인 Atlas Search를 제공합니다.
$or
및 지리적 공간 쿼리
$or
는 near 절에 대한 다음 예외를 제외하고 지리 공간적 절을 지원합니다(near 절로는 $nearSphere
및 $near
등이 있음). $or
는 다른 절과 함께 near 절을 포함할 수 없습니다.
$or
및 정렬 연산
sort()
를 사용하여 $or
쿼리를 실행할 때 MongoDB는 $or
절을 지원하는 인덱스를 사용할 수 있습니다.
$or
및 부분 인덱스
$or
을 사용하여 부분 인덱스를 생성할 수 있습니다. db.collection.createIndex() 메서드의 partialFilterExpression
을 사용하여 부분 인덱스를 생성하세요.
$or
대 $in
동일한 필드의 값에 대한 동등성 검사인 <expressions>
와 함께 $or
을 사용할 경우 $or
연산자 대신 $in
연산자를 사용하세요.
예를 들어 inventory
collection에서 quantity
필드 값이 20
또는 50
인 모든 문서를 선택하려면 $in
연산자를 사용합니다.
db.inventory.find ( { quantity: { $in: [20, 50] } } )
중첩된 $or
절
$or
작업을 중첩할 수 있습니다.
Error Handling
쿼리 엔진이 쿼리를 최적화할 수 있도록 $or
은 다음과 같이 오류를 처리합니다:
$or
에 제공된 표현식이 단독으로 평가될 때 오류가 발생하는 경우, 표현식이 포함된$or
이 오류를 일으킬 수 있지만 오류가 보장되지는 않습니다.$or
에 제공된 첫 번째 표현식 뒤에 제공된 표현식은 첫 번째 표현식이true
로 평가되더라도 오류를 일으킬 수 있습니다.
예를 들어, 다음 쿼리는 $x
이 0
인 경우 항상 오류를 생성합니다.
db.example.find( { $expr: { $eq: [ { $divide: [ 1, "$x" ] }, 3 ] } } )
$or
에 제공된 여러 표현식이 포함된 다음 쿼리에서 $x
이 0
인 문서가 있는 경우 오류가 발생할 수 있습니다.
db.example.find( { $or: [ { x: { $eq: 0 } }, { $expr: { $eq: [ { $divide: [ 1, "$x" ] }, 3 ] } } ] } )