OR 조건이 있는 MongoDB 쿼리
이 자습서 기사에서는 MongoDB 쿼리에서 $or
연산자를 사용하는 방법을 설명합니다.
MongoDB는 사용자에게 다양한 유형의 논리 쿼리 연산자를 제공하며 $or
연산자는 그 중 하나입니다. 이 연산자는 두 개 이상의 표현식 배열에서 논리적 OR
연산을 수행하고 배열의 지정된 표현식 중 하나 이상과 일치하는 문서만 선택하거나 검색합니다.
MongoDB의 $or
연산자
find()
, update()
등과 같은 메서드에서 $or
연산자를 사용할 수 있습니다.
- 이 연산자를 텍스트 쿼리,
GeoSpatial
쿼리 및 정렬 작업과 함께 사용할 수도 있습니다. - MongoDB는
$or
표현식의 절을 평가할 때 컬렉션 스캔을 수행합니다. 인덱스가$or
표현식의 모든 절을 지원하는 경우 MongoDB는 인덱스 스캔을 수행합니다. $or
작업을 중첩할 수도 있습니다.
$or
연산자는 두 개 이상의 표현식으로 구성된 배열에서 논리적 OR
연산을 수행하여 적어도 하나의 표현식을 충족하는 문서를 선택합니다.
통사론:
{ $or: [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] }
질문:
db.inventory.find( { $or: [ { quantity: { $lt: 50 } }, { price: 20 } ] } )
수량
필드 값이 50
미만이거나 가격
필드 값이 20
미만인 인벤토리 컬렉션의 이 쿼리에서 모든 문서가 반환됩니다.
$or
연산자에 대한 절 및 인덱스
MongoDB는 $or
표현식의 절을 평가할 때 컬렉션 스캔 또는 인덱스 스캔을 수행합니다. 인덱스가 모든 절을 지원하는 경우 MongoDB는 인덱스 스캔을 수행합니다.
따라서 $or
표현식의 모든 절은 MongoDB가 명령문을 평가하는 데 사용할 인덱스에 의해 지원되어야 합니다. 그렇지 않은 경우 MongoDB는 컬렉션 스캔을 실행합니다.
$or
쿼리의 각 절은 $or
쿼리와 함께 인덱스를 사용할 때 해당 인덱스를 활용할 수 있습니다.
질문:
db.inventory.find( { $or: [ { quantity: { $lt: 50 } }, { price: 20 } ] } )
복합 인덱스 대신 수량에 대해 하나의 인덱스를 설정하고 이 쿼리를 처리하기 위해 가격에 대해 다른 인덱스를 설정합니다.
질문:
db.inventory.createIndex( { quantity: 1 } )
db.inventory.createIndex( { price: 1 } )
$or
절을 활성화하기 위해 MongoDB는 geoHaystack
인덱스를 제외한 모든 인덱스를 사용할 수 있습니다.
단일 쿼리 및 $or
연산자
-
$text
쿼리 및$or
연산자.$or
에$text
쿼리가 포함된 경우 인덱스는$or
배열의 모든 절을 지원해야 합니다.$text
쿼리는 인덱스를 사용해야 하며$or
는 모든 절이 인덱스에서 지원되는 경우에만 인덱스를 사용할 수 있습니다.$text
쿼리가 인덱스를 사용할 수 없는 경우 쿼리에서 오류가 발생합니다. -
GeoSpatial
쿼리 및$or
연산자.Near 절(
$nearSphere
및$near
포함)을 제외하고$or
는 지리적 절을 허용합니다.$or.
에는 다른 절과 함께 near 절이 있을 수 없습니다. -
정렬 작업 및
$or
연산자.이제 MongoDB는 ‘sort()‘로 ‘$or’ 쿼리를 실행할 때
$or
절을 지원하는 인덱스를 사용할 수 있습니다. 인덱스는 이전 버전의 MongoDB에서 사용되지 않았습니다.
$or
연산자 VS $in
연산자
동일한 필드의 값에 대해 동등성을 검사하는 표현식에 $or
연산자를 사용하는 대신 $in
연산자를 사용하십시오. $in
연산자를 사용하여 수량
필드 값이 40
또는 1000
인 '재고'
컬렉션에서 모든 문서를 선택합니다.
질문:
db.inventory.find ( { quantity: { $in: [40, 1000] } } )
또한 $or
연산자를 중첩할 수 있습니다.
$or
연산자를 사용한 오류 처리
$or
연산자는 쿼리 엔진이 쿼리를 개선할 수 있도록 다음과 같은 방식으로 실수를 처리합니다.
$or
연산자에 표현식이 제공되면 별도로 평가할 때 오류가 발생합니다. 표현식을 포함하는$or
연산자는 오류를 유발할 수 있지만 이것이 보장되지는 않습니다.$or
에 제공된 첫 번째 표현식이true,
로 평가되더라도 이후에 제출된 표현식은 오류를 트리거할 수 있습니다.
예를 들어 $x
가 0,
인 경우 다음 쿼리는 항상 오류를 반환합니다.
질문:
db.example.find( {
$expr: { $eq: [ { $divide: [ 1, "$x" ] }, 3 ] }
} )
$x
의 값이 0
인 문서가 있다고 가정합니다. 여기에는 $or
에 전달된 여러 표현식이 포함됩니다. 다음 예에서는 오류가 발생할 수 있습니다.
질문:
db.example.find( {
$or: [
{ x: { $eq: 0 } },
{ $expr: { $eq: [ { $divide: [ 1, "$x" ] }, 3 ] } }
]
} )
이 MongoDB 자습서는 MongoDB 쿼리와 함께 $or
연산자를 사용하여 두 개 이상의 표현식으로 구성된 배열에서 논리적 OR
작업을 수행하고 적어도 하나와 일치하는 문서만 선택하거나 검색하는 방법을 알려줍니다. 배열에 주어진 표현식.