장 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