Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ / / /

$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 식의 절을 평가할 때, 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 } )

MongoDB는 geoHaystack 인덱스를 제외한 모든 항목을 사용하여 $or 절을 지원할 수 있습니다.

$or$text 쿼리가 포함된 경우 $or 배열의 모든 절이 인덱스에서 지원되어야 합니다. 이는 $text 쿼리가 인덱스를 사용해야 하고 모든 절이 인덱스에서 지원되는 경우에만 $or가 인덱스를 사용할 수 있기 때문입니다. $text 쿼리가 인덱스를 사용할 수 없는 경우 쿼리는 오류를 반환합니다.

참고

$text 이 페이지에서는 자체 관리형(Atlas에서 관리하지 않는) 배포를 위한 일반 텍스트 쿼리 기능을 제공합니다. MongoDB Atlas에서 호스팅되는 데이터의 경우 MongoDB는 향상된 전체 텍스트 쿼리 솔루션인 Atlas Search를 제공합니다.

$or는 near 절에 대한 다음 예외를 제외하고 지리 공간적 절을 지원합니다(near 절로는 $nearSphere$near 등이 있음). $or는 다른 절과 함께 near 절을 포함할 수 없습니다.

sort()를 사용하여 $or 쿼리를 실행할 때 MongoDB는 $or 절을 지원하는 인덱스를 사용할 수 있습니다.

$or을 사용하여 부분 인덱스를 생성할 수 있습니다. db.collection.createIndex() 메서드의 partialFilterExpression을 사용하여 부분 인덱스를 생성하세요.

동일한 필드의 값에 대한 동등성 검사인 <expressions>와 함께 $or을 사용할 경우 $or 연산자 대신 $in 연산자를 사용하세요.

예를 들어 inventory collection에서 quantity 필드 값이 20 또는 50인 모든 문서를 선택하려면 $in 연산자를 사용합니다.

db.inventory.find ( { quantity: { $in: [20, 50] } } )

$or 작업을 중첩할 수 있습니다.

다음도 참조하세요.

쿼리 엔진이 쿼리를 최적화할 수 있도록 $or 은 다음과 같이 오류를 처리합니다:

  • $or에 제공된 표현식이 단독으로 평가될 때 오류가 발생하는 경우, 표현식이 포함된 $or이 오류를 일으킬 수 있지만 오류가 보장되지는 않습니다.

  • $or에 제공된 첫 번째 표현식 뒤에 제공된 표현식은 첫 번째 표현식이 true로 평가되더라도 오류를 일으킬 수 있습니다.

예를 들어, 다음 쿼리는 $x0인 경우 항상 오류를 생성합니다.

db.example.find( {
$expr: { $eq: [ { $divide: [ 1, "$x" ] }, 3 ] }
} )

$or에 제공된 여러 표현식이 포함된 다음 쿼리에서 $x0인 문서가 있는 경우 오류가 발생할 수 있습니다.

db.example.find( {
$or: [
{ x: { $eq: 0 } },
{ $expr: { $eq: [ { $divide: [ 1, "$x" ] }, 3 ] } }
]
} )

돌아가기

$nor

이 페이지의 내용