장 3: MongoDB - 조건부 쿼리
이 장에서는 MongoDB의 조건부 쿼리를 소개합니다. 이는 SQL 문의 등가, 초과, 미만과 유사한 비교 연산자를 사용합니다.
MongoDB에서 지원하는 조건 연산자
연산자 | 설명 |
---|---|
$eq | 등가, SQL의 = 연산자와 유사 |
$gt | 초과, SQL의 > 연산자와 유사 |
$gte | 이상, SQL의 >= 연산자와 유사 |
$in | 배열에 일치, SQL의 in 쿼리와 유사 |
$lt | 미만, SQL의 < 연산자와 유사 |
$nin | 배열 내 어떤 값과도 일치하지 않음, SQL의 not in 연산자와 유사 |
테스트 데이터
inventory 컬렉션 데이터는 다음과 같습니다.
{ _id: 1, item: { name: "ab", code: "123" }, qty: 15, tags: [ "A", "B", "C" ] }
{ _id: 2, item: { name: "cd", code: "123" }, qty: 20, tags: [ "B" ] }
{ _id: 3, item: { name: "ij", code: "456" }, qty: 25, tags: [ "A", "B" ] }
{ _id: 4, item: { name: "xy", code: "456" }, qty: 30, tags: [ "B", "A" ] }
{ _id: 5, item: { name: "mn", code: "000" }, qty: 20, tags: [ [ "A", "B" ], "C" ] }
$eq (등가 일치)
db.inventory.find( { qty: { $eq: 20 } } )
db.inventory.find( { "item.name": { $eq: "ab" } } )
// 축약형, $eq 연산자를 무시해도 됨, qty = 20
db.inventory.find( { qty: 20 } )
동등한 SQL:
select * from inventory where qty = 20
// 이는 예시일 뿐으로, SQL은 item.name과 같이 중첩된 필드 형식을 지원하지 않습니다.
select * from inventory where item.name = 20
$gt (초과)
db.inventory.find( { qty: { $gt: 20 } } )
동등한 SQL:
select * from inventory where qty > 20
$gte (이상)
db.inventory.find( { qty: { $gte: 20 } } )
동등한 SQL:
select * from inventory where qty >= 20
$in
배열 내 하나의 값과 일치
db.inventory.find( { qty: { $in: [ 5, 15 ] } } )
동등한 SQL:
select * from inventory where qty in (5, 15)
$nin
$in 연산자의 반대
db.inventory.find( { qty: { $nin: [ 5, 15 ] } } )
동등한 SQL:
select * from inventory where qty not in (5, 15)
$lt (미만)
db.inventory.find( { qty: { $lt: 20 } } )
동등한 SQL:
select * from inventory where qty < 20