쿼리 지정
개요
대부분의 CRUD 작업은 쿼리 문서 일치 조건을 지정하여 일치하는 문서 세트의 범위를 좁힐 수 있습니다. 쿼리 문서에는 결과 세트에 포함할 문서를 결정하는 특정 필드에 적용되는 쿼리 연산자가 하나 이상 포함되어 있습니다.
쿼리 문서에서 { title: 'The Room' }
과 같은 리터럴 값과 필드를 일치하거나 쿼리 연산자를 작성하여 보다 복잡한 일치 기준을 표현할 수 있습니다. 이 가이드에서는 다음과 같은 MongoDB의 쿼리 연산자 카테고리를 다루고 사용 방법에 대한 예시를 보여줍니다.
이 가이드의 예시를 따라 하려면 다음 코드 스니펫을 사용하여 과일을 설명하는 문서를 myDB.fruits
컬렉션에 삽입하세요.
const myDB = client.db("myDB"); const myColl = myDB.collection("fruits"); await myColl.insertMany([ { "_id": 1, "name": "apples", "qty": 5, "rating": 3 }, { "_id": 2, "name": "bananas", "qty": 7, "rating": 1, "color": "yellow" }, { "_id": 3, "name": "oranges", "qty": 6, "rating": 2 }, { "_id": 4, "name": "avocados", "qty": 3, "rating": 5 }, ]);
참고
쿼리 작업은 일치하는 문서가 포함된 커서 에 대한 참조를 반환할 수 있습니다. 커서 에 저장된 데이터를 검사하는 방법을 학습 보려면 커서 기본 사항 페이지를 참조하세요.
리터럴 값 쿼리
리터럴 값 쿼리를 사용하면 쿼리 문서에 입력한 값과 정확히 일치하는 데이터를 쿼리할 수 있습니다. 리터럴 값 쿼리는 필드 이름과 값, 두 부분으로 구성됩니다. 이러한 쿼리에서 반환된 문서에는 제공된 이름과 정확히 동일한 이름을 가진 필드와 제공된 값과 정확히 동일한 필드 값이 포함되어야 합니다. 다음 작업은 리터럴 쿼리를 사용하여 값이 '사과'인 '이름' 필드가 포함된 문서를 검색합니다:
const query = { "name": "apples" }; const cursor = myColl.find(query); for await (const doc of cursor) { console.dir(doc); }
이 코드 스니펫은 다음과 같은 결과를 반환합니다.
{ "_id": 1, "name": "apples", "qty": 5, "rating": 3 }
참고
리터럴 값 쿼리는 $eq
비교 연산자와 동일합니다. 결과적으로 다음 두 쿼리는 동일한 쿼리입니다:
myColl.find({ rating: { $eq: 5 } });
myColl.find({ rating: 5 });
비교 연산자
비교 연산자를 사용하면 컬렉션 값과의 비교를 기반으로 데이터를 쿼리할 수 있습니다. 일반적인 비교 연산자로는 '보다 큰(greater than)' 비교를 위한 $gt
, '보다 작은(less than)' 비교를 위한 $lt
, '같지 않은(not equal to)' 비교를 위한 $ne
가 있습니다. 다음 작업에서는 비교 연산자 $gt
를 사용하여 qty
필드 값이 5
보다 큰 문서를 검색하여 출력합니다.
// $gt means "greater than" const query = { qty: { $gt : 5 } }; const cursor = myColl.find(query); for await (const doc of cursor) { console.dir(doc); }
이 코드 스니펫은 다음과 같은 결과를 반환합니다.
{ "_id": 2, "name": "bananas", "qty": 7, "rating": 1 } { "_id": 3, "name": "oranges", "qty": 6, "rating": 2 }
로직 연산
논리 연산자를 사용하면 필드 수준 연산자의 결과에 적용된 논리를 사용하여 데이터를 쿼리할 수 있습니다. 예를 들어 $or
메서드를 사용하여 $gt
비교 연산자 또는 리터럴 값 쿼리와 일치하는 문서를 쿼리할 수 있습니다. 다음 작업에서는 논리 연산자 $not
을 사용하여 수량 값이 5보다 크지 않은 문서를 검색하여 출력합니다.
const query = { qty: { $not: { $gt: 5 }}}; const cursor = myColl.find(query); for await (const doc of cursor) { console.dir(doc); }
이 코드 스니펫은 다음과 같은 결과를 반환합니다.
{ "_id": 4, "name": "avocados", "qty": 3, "rating": 5 } { "_id": 1, "name": "apples", "qty": 5, "rating": 3 }
참고
쿼리 문서에 여러 요소가 포함된 경우 이러한 요소는 암시적 $and
논리 연산자와 함께 결합되어 쿼리와 일치하는 문서를 파악합니다. 결과적으로 다음 두 쿼리는 동일한 쿼리입니다:
myColl.find({ rating: { $eq: 5 }, qty: { $gt: 4 } });
myColl.find({ $and: [ { rating: { $eq: 5 }}, { qty: { $gt: 4 }} ] });
비교 연산자에 대한 자세한 내용은 쿼리 연산자 비교에 대한 참조 매뉴얼 항목을 참조하세요.
요소 연산자
요소 연산자를 사용하면 필드의 유무 또는 유형을 기반으로 쿼리할 수 있습니다. 다음 작업은 요소 연산자 $exists
를 사용하여 color
필드가 포함된 문서를 검색합니다.
const query = { color: { $exists: true } }; const cursor = myColl.find(query); for await (const doc of cursor) { console.dir(doc); }
이 코드 스니펫은 다음과 같은 결과를 반환합니다.
{ "_id": 2, "name": "bananas", "qty": 7, "rating": 1, "color": "yellow" }
이 연산자에 대한 자세한 내용은 $exists 연산자에 대한 참고 매뉴얼 항목을 참조하세요.
평가 연산자
평가 연산자를 사용하면 컬렉션의 문서를 쿼리할 때 정규식 및 텍스트 검색과 같은 상위 수준의 로직을 실행할 수 있습니다. 일반적인 평가 연산자로는 $regex
및 $text
가 있습니다. 다음 작업은 평가 연산자 $mod
를 사용하여 qty
필드 값이 3으로 나누어지고 나머지가 0인 문서를 검색합니다.
// $mod means "modulo" and returns the remainder after division const query = { qty: { $mod: [ 3, 0 ] } }; const cursor = myColl.find(query); for await (const doc of cursor) { console.dir(doc); }
이 코드 스니펫은 다음과 같은 결과를 반환합니다.
{ "_id": 3, "name": "oranges", "qty": 6, "rating": 2 } { "_id": 4, "name": "avocados", "qty": 3, "rating": 5 }
이 연산자에 대한 자세한 내용은 $mod 연산자에 대한 참조 매뉴얼 항목을 참조하세요.