MongoDB에서 여러 조건이 있는 쿼리
이 기사에서는 MongoDB에서 여러 문서를 사용하여 여러 조건으로 쿼리하는 방법을 설명합니다. $and
및 $or
연산자는 각각의 예와 함께 간략하게 설명됩니다.
MongoDB는 사용자에게 다양한 논리 쿼리 연산자인 $or
및 $and
연산자를 제공합니다. 하지만 먼저 이 기사의 목차를 살펴보겠습니다.
$or
연산자$or
연산자를 사용하여 여러 조건 찾기$and
연산자$and
연산자를 사용하여 여러 조건 찾기
MongoDB의 $or
연산자
요구 사항에 따라 find()
, update()
등과 같은 메서드에서 이 연산자를 사용할 수 있습니다.
- 이 연산자를 텍스트 쿼리,
GeoSpatial
쿼리 및 정렬 작업과 함께 사용할 수도 있습니다. - MongoDB는
$or
표현식의 절을 평가할 때 컬렉션 스캔을 수행합니다. 또는 인덱스가$or
표현식의 모든 절을 지원하는 경우 MongoDB는 인덱스 스캔을 수행합니다. $or
작업을 중첩할 수도 있습니다.
두 개 이상의 expressions
배열에서 논리적 OR
연산을 실행하여 OR
연산자는 expressions
중 하나 이상을 충족하는 문서를 선택합니다. $or
연산자의 구문은 다음과 같습니다.
{ $or: [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] }
다음 예를 고려하십시오.
db.inventory.find( { $or: [ { quantity: { $lt: 51 } }, { price: 20 } ] } )
이 쿼리에서 quantity
필드 값이 51
미만이거나 price
필드 값이 20
미만인 인벤토리 컬렉션의 모든 문서가 반환됩니다.
먼저 MongoDB에서 or
연산자의 동작에 대해 논의해 보겠습니다.
$or
연산자에 대한 절 및 인덱스
$or
표현식의 모든 절을 평가할 때 MongoDB는 컬렉션 스캔 또는 인덱스 스캔을 수행합니다. MongoDB는 인덱스가 모든 절을 지원하는 경우 인덱스 스캔을 실행합니다.
결과적으로 MongoDB가 명령문을 분석하려면 $or
표현식의 모든 절이 인덱스에서 지원되어야 합니다. 그렇지 않은 경우 MongoDB는 컬렉션 스캔을 수행합니다.
$or
쿼리의 각 절은 $or
쿼리와 함께 인덱스를 사용할 때 해당 인덱스를 활용할 수 있습니다. 아래의 다음 예를 살펴보십시오.
db.inventory.find( { $or: [ { quantity: { $lt: 51 } }, { price: 20 } ] } )
복합 인덱스 대신 quantity
에 대해 하나의 인덱스를 설정하고 이 쿼리를 처리하기 위해 price
에 대해 다른 인덱스를 설정합니다.
db.inventory.createIndex( { quantity: 1 } )
db.inventory.createIndex( { price: 1 } )
$or
절을 활성화하기 위해 MongoDB는 geoHaystack
인덱스를 제외한 모든 인덱스를 사용할 수 있습니다.
text
쿼리 및 $or
연산자
$or
에 $text
쿼리가 포함된 경우 인덱스는 $or
배열의 모든 절을 지원해야 합니다. 따라서 $text
쿼리는 인덱스를 사용해야 하며 $or
쿼리는 해당 절이 모두 지원되는 경우에만 인덱스를 사용할 수 있습니다.
$text
쿼리가 인덱스를 사용하지 않는 경우 쿼리는 오류를 반환합니다.
GeoSpatial
쿼리 및 $or
연산자
$or
는 near
절($nearSphere
및 $near
포함)을 제외한 지리적 절을 허용합니다. 다른 절과 함께 $or
에 관계절이 있을 수 없습니다.
정렬 작업 및 $or
연산자
sort()
로 $or
쿼리를 수행할 때 MongoDB는 이제 $or
절을 지원하는 인덱스를 활용할 수 있습니다. 이전 버전의 MongoDB에서는 인덱스가 사용되지 않았습니다.
$or
VS $in
동일한 필드의 값에 대한 동등성 테스트인 expressions
와 함께 $or
연산자 대신 $in
연산자를 사용하십시오.
예를 들어 inventory
컬렉션에서 quantity
필드 값이 40
또는 1000
인 모든 문서를 선택하려면 $in
연산자를 사용합니다.
db.inventory.find ( { quantity: { $in: [40, 1000] } } )
$or
연산자를 사용하여 여러 조건 찾기
MongoDB의 또는
연산자는 제공된 구문 중 하나 이상과 일치하는 문서만 선택하거나 검색하는 데 사용됩니다.
- 요구 사항에 따라
find()
,update()
등과 같은 메서드에서 이 연산자를 사용할 수도 있습니다. - 텍스트 쿼리 및 정렬 작업에도 이 연산자를 사용할 수 있습니다.
$or
작업을 중첩할 수도 있습니다.
$or
연산자의 작동 방식을 이해하기 위해 예제를 살펴보겠습니다.
예:
다음 문서를 포함하는 컬렉션을 만들어 봅시다.
db={
"students": [
{
id: 1,
name: "Ali",
Age: 24,
language: "JavaScript",
status: "inactive",
score: 82
},
{
id: 2,
name: "Haris",
Age: 35,
language: "Python",
status: "inactive",
score: 87
},
{
id: 3,
team: "Hamza",
Age: 27,
status: "active",
language: "Python",
score: 84
}
]
}
find()
메서드를 사용하여 컬렉션의 모든 문서를 표시합니다.
db.students.find();
다음은 $or
연산자가 있는 MongoDB 쿼리입니다.
db.students.find({
$or: [
{
Age: {
$lte: 24
}
},
{
score: {
$lt: 80
}
},
{
status: "Inactive"
}
]
})
그러면 다음과 같은 출력이 생성됩니다.
MongoDB의 $and
연산자
$and
는 하나 이상의 표현식 배열(expression1>
, expression2>
등)에서 논리적 AND
연산을 수행하고 모든 표현식을 충족하는 문서를 선택합니다.
행동:
$and
는 쿼리 엔진이 쿼리를 개선하는 데 도움이 되도록 다음과 같이 실수를 처리합니다.
$and
에 제공된 표현식이 단독으로 평가되는 경우 오류가 발생하는 경우 표현식을 포함하는$and
는 오류가 발생할 수 있지만 이것이 보장되지는 않습니다.$and
에 제공된 첫 번째 표현식 다음에 제공된 표현식은 첫 번째 표현식이false
로 평가되더라도 오류를 유발할 수 있습니다.
통사론:
and
연산자를 사용할 때 사용되는 구문은 다음과 같습니다.
{ $and: [{ <expression1> },{ <expression2> }, ... ,{ <expressionN> }] }
예를 들어 다음 쿼리는 $x
가 0
인 경우 항상 오류를 생성합니다.
db.example.find( {
$expr: { $eq: [ { $divide: [ 1, "$x" ] }, 3 ] }
} )
$and
에 제공된 여러 표현식을 포함하는 다음 쿼리는 $x
가 0
인 문서가 있는 경우 오류를 생성할 수 있습니다.
db.example.find( {
$and: [
{ x: { $ne: 0 } },
{ $expr: { $eq: [ { $divide: [ 1, "$x" ] }, 3 ] } }
]
} )
$and
연산자를 사용하여 여러 조건 찾기
MongoDB에서 $and
연산자를 사용하여 여러 기준을 적용할 수 있습니다. 먼저 $and
연산을 사용하여 모든 조건 구문을 충족하는 모든 논문을 선택합니다.
- 요구 사항에 따라
find()
,update()
등과 같은 메서드에서 이 연산자를 사용할 수 있습니다. - 텍스트 쿼리 및 정렬 작업에도 이 연산자를 사용할 수 있습니다.
예를 들어 이해해 봅시다.
다음 레코드가 students
컬렉션에 삽입됩니다.
db={
"students": [
{
id: 1,
name: "Ali",
Age: 24,
language: "JavaScript",
status: "inactive",
score: 82
},
{
id: 2,
name: "Haris",
Age: 35,
language: "Python",
status: "inactive",
score: 87
},
{
id: 3,
team: "Hamza",
Age: 27,
status: "active",
language: "Python",
score: 84
}
]
}
이제 $and
연산자를 사용하여 여러 조건을 적용하고 문서를 찾습니다.
db.students.find({
$and: [
{
"language": "Python"
},
{
"Age": 35
}
]
})
여기서 $and
작업은 언어
가 Python
이고 Age
가 35
인 문서를 찾기 위해 적용됩니다.
이 스크린샷에서 MongoDB에서 위 코드의 작동을 확인하십시오.
주어진 조건에 따라 성공적으로 결과를 얻었습니다. 그런 다음 $and
연산자를 사용하고 조건에 따라 문서를 검색할 수 있습니다.
이 기사에서는 $and
및 $or
연산자를 사용하여 MongoDB에서 여러 문서를 사용하여 여러 조건으로 쿼리하는 방법을 자세히 설명합니다.