MongoDB 쿼리는 단순한 동등 비교를 넘는 조건을 표현하기 위해 연산자($ 접두사)를 사용합니다. 비교, 논리, 요소, 배열 연산자가 있습니다. 이들은 원하는 데이터를 찾기 위한 필터 document의 구성 요소입니다.
비교 연산자
db.products.find({ price: { $gt: 100 } }); // 보다 큼
db.products.find({ price: { $gte: 100, $lte: 500 } }); // 범위 (>= 100 AND <= 500)
db.products.find({ status: { $ne: "sold" } }); // 같지 않음
db.products.find({ category: { $in: ["books", "toys"] } }); // 목록에 포함
db.products.find({ tags: { $nin: ["old"] } }); // 목록에 미포함
$eq $ne → 같음 / 같지 않음
$gt $gte → 보다 큼 / 크거나 같음
$lt $lte → 보다 작음 / 작거나 같음
$in $nin → 값 목록에 포함 / 미포함
논리 연산자
// $and / $or / $not / $nor 로 조건 결합
db.users.find({ $or: [{ age: { $lt: 18 } }, { age: { $gt: 65 } }] }); // 어림 OR 늙음
db.users.find({ $and: [{ active: true }, { premium: true }] });
// (하나의 필터에 있는 여러 field는 기본적으로 AND)
db.users.find({ active: true, age: { $gt: 18 } }); // active AND age > 18
필터의 여러 field는 암묵적으로 AND로 결합됩니다. $or/$and/$not은 더 복잡한 논리를 표현합니다.
요소 및 배열 연산자
db.users.find({ email: { $exists: true } }); // field 존재 여부
db.users.find({ age: { $type: "number" } }); // field가 특정 타입인지
// 배열 연산자
db.posts.find({ tags: "mongodb" }); // 배열이 "mongodb"를 포함
db.posts.find({ tags: { $all: ["a", "b"] } }); // 이 모두를 포함
db.posts.find({ tags: { $size: 3 } }); // 배열 길이가 정확히 3
db.posts.find({ "scores": { $elemMatch: { $gt: 80, $lt: 90 } } }); // 조건에 맞는 요소
배열 연산자는 배열 내부를 쿼리합니다. $all(모두 포함), $size(길이), $elemMatch(여러 조건에 맞는 요소)이며, 값을 직접 일치시키면 포함 여부를 확인합니다.
중첩 field 쿼리 (점 표기법)
db.users.find({ "address.city": "NY" }); // 점 표기법으로 중첩 field 쿼리
왜 중요한가
쿼리 연산자는 MongoDB에서 데이터를 효과적으로 필터링하는 데 필수적입니다. 조건에 따라 특정 document를 찾는 것은 모든 애플리케이션에서 끊임없이 필요하므로, 이를 이해하는 것은 근본적인 일상 지식입니다.
비교 연산자($gt, $lt, $in 등 범위와 값 일치용), 논리 연산자($or, $and, 그리고 여러 필터 field가 암묵적으로 AND로 결합된다는 점), 요소 연산자($exists, $type), 특히 배열 연산자($all, $size, $elemMatch, 직접 포함 일치)를 아는 것은 필요한 쿼리 조건의 전 범위를 다룹니다.
배열 연산자는 MongoDB에서 특히 중요합니다. Document는 흔히 배열을 포함하고(document 모델의 핵심 부분), 그 내부를 쿼리하는 것(포함, 전체 요소, 요소 일치)은 MongoDB 쿼리를 구별 짓는 빈번한 요구이기 때문입니다.
MongoDB의 중첩 document 구조를 고려할 때 중첩 field 쿼리를 위한 점 표기법("address.city")을 이해하는 것도 필수적입니다.
데이터 필터링은 가장 흔한 데이터베이스 연산 중 하나이고, MongoDB의 쿼리 연산자(비교, 논리, 요소, 특히 배열 연산자와 중첩 field 쿼리)는 올바른 document를 찾기 위한 조건을 표현하는 방식이므로, 쿼리 연산자를 이해하는 것은 필수적이고 자주 적용되는 MongoDB 지식입니다. SQL의 WHERE 조건을 숙달하는 것에 해당하며, MongoDB의 document 및 배열이 풍부한 데이터에 효과적인 쿼리를 작성하는 데 필요한 모든 MongoDB 개발의 핵심 기술입니다.
