MongoDB는 논리 연산자($and, $or, $not, $nor)와 필터의 여러 field에 대한 암묵적 AND를 사용하여 쿼리 조건을 결합합니다. 이를 통해 정확히 필요한 document를 찾기 위한 복잡한 쿼리 논리를 표현할 수 있습니다.
암묵적 AND (여러 field)
db..({ : , : { : } });
MongoDB는 논리 연산자($and, $or, $not, $nor)와 필터의 여러 field에 대한 암묵적 AND를 사용하여 쿼리 조건을 결합합니다. 이를 통해 정확히 필요한 document를 찾기 위한 복잡한 쿼리 논리를 표현할 수 있습니다.
db..({ : , : { : } });
가장 단순한 경우: 필터에 여러 조건을 나열하면 암묵적으로 AND로 결합됩니다 — 둘/모두가 일치해야 합니다.
// $or는 조건의 배열을 받음; 어느 하나라도 참이면 document가 일치
db.users.find({
$or: [
{ age: { $lt: 18 } },
{ age: { $gt: 65 } }
]
});
// → age < 18 OR age > 65
// 보통 암묵적이지만, 같은 field에 대한 조건을 결합할 때 $and가 필요함
db.products.find({
$and: [
{ price: { $gt: 100 } },
{ price: { $lt: 500 } }
]
});
// (흔히 { price: { $gt: 100, $lt: 500 } }으로 더 깔끔하게 쓸 수 있음)
// $and는 $or 그룹을 결합할 때도 유용함:
db.users.find({
$and: [
{ $or: [{ role: "admin" }, { role: "editor" }] },
{ active: true }
]
});
db.products.find({ price: { $not: { $gt: 100 } } }); // NOT (price > 100) → price <= 100 또는 없음
db.users.find({ $nor: [{ active: true }, { premium: true }] }); // 두 조건 모두 거짓
// 실제 쿼리는 논리 + 비교 연산자를 결합함
db.orders.find({
status: "shipped", // 암묵적 AND
$or: [
{ total: { $gt: 1000 } },
{ priority: "high" }
]
});
// → status = shipped AND (total > 1000 OR priority = high)
논리 연산자는 MongoDB에서 복잡한 쿼리 조건을 표현하는 데 필수적입니다. 실제 쿼리는 종종 단일 조건 이상을 필요로 하므로(여러 기준을 AND/OR 논리로 결합), 이를 이해하는 것은 데이터를 효과적으로 필터링하는 근본적인 일상 지식입니다.
여러 필터 field의 암묵적 AND(가장 단순하고 흔한 경우 — 모두 일치해야 하는 조건 나열), $or(여러 조건 중 어느 것이든 일치 — 대안에 대한 빈번한 요구), $and(명시적 AND, 같은 field의 조건 결합이나 $or 절 그룹화에 필요), $not/$nor(부정)를 아는 것은 쿼리 요구사항을 표현하는 논리적 구성 요소를 다룹니다.
논리 연산자와 비교 연산자를 결합하는 방법("status가 shipped AND (total > 1000 OR priority high)" 같은 쿼리 구성)을 이해하는 것은 애플리케이션이 요구하는 현실적인 다중 조건 쿼리에 필요합니다.
결합된 조건으로 데이터를 필터링하는 것은 흔한 요구이고(복잡한 기준에 맞는 document 찾기), MongoDB의 논리 연산자(암묵적 AND, $or, $and, $not/$nor)가 이 논리를 표현하는 방식이므로 — 실제 조건을 위한 비교 연산자와 결합되어 — 논리 연산자를 이해하는 것은 효과적인 쿼리 작성에 필수적이고 자주 적용되는 MongoDB 지식입니다. SQL WHERE 절의 AND/OR/NOT을 숙달하는 것에 해당하며, 실제 애플리케이션이 요구하는 종종 복잡한 조건으로 정확히 필요한 document를 찾는 데 필요합니다.