요약
- 배열로 주어지는 하나 이상의 표현식 모두가 참인 document를 모두 가져오고 싶을 때 $and 사용
- 배열로 주어지는 하나 이상의 표현식 모두가 거짓인 document를 모두 가져오고 싶을 때 $nor 사용
- 배열로 주어지는 둘 이상의 표현식 중 적어도 하나가 참인 document를 모두 가져오고 싶을 때 $or 사용
1. $and
inventory collection에서 가격이 1.99와 같지 않고, 가격 필드가 존재하는 document를 모두 가져옵니다.
db.inventory.find( { $and: [ { 가격: { $ne: 1.99 } }, { 가격: { $exists: true } } ] } )
아래 구문으로 축약할 수도 있습니다. 훨씬 간결해보이네요.
db.inventory.find( { 가격: { $ne: 1.99, $exists: true } } )
다른 logical query operator를 사용한 표현식도 사용될 수 있습니다.
수량이 10보다 작거나 50보다 큰 동시에, 판매중이거나 가격이 5 미만인 document를 가져옵니다.
db.inventory.find( {
$and: [
{ $or: [ { 수량: { $lt : 10 } }, { 수량 : { $gt: 50 } } ] },
{ $or: [ { 판매중: true }, { 가격 : { $lt : 5 } } ] }
]
} )
2. $nor
$and와 대우 관계로 작동합니다.
3. $or
수량이 20보다 작거나 가격이 10인 document를 모두 가져옵니다.
db.inventory.find( { $or: [ { 수량: { $lt: 20 } }, { 가격: 10 } ] } )
$or 공식 문서에는 index와 관련된 내용이 기록되어있습니다.
$or에 주는 조항들( 위에서는 [ { 수량: ... } , { 가격: ... } ] )이 평가될 때, MongoDB는 아래 두 방식 중 하나를 수행합니다.
- collection scan
- index scans (모든 조항에 index가 지원되는 경우)
다시 말해서,
MongoDB가 $or 조항들을 평가하는데 index를 사용하기위해서는 모든 조항들에 index가 지원되어야 합니다.
그렇지 않으면 collection scan을 수행합니다.
따라서, index scan을 하려면 아래와 같이 index를 생성해줍니다.
db.inventory.createIndex( { 수량: 1 } )
db.inventory.createIndex( { 가격: 1 } )
그렇다면 collection scan과 index scans의 차이는 무엇일까요?
...
출처: $and — MongoDB Manual , $nor — MongoDB Manual, $or — MongoDB Manual
'MongoDB > Logical Query Operators' 카테고리의 다른 글
[MongoDB] $not (0) | 2022.06.30 |
---|