쿼리 지정
개요
이 가이드에서는 문서의 하위 집합과 일치하도록 쿼리를 지정하는 방법을 배울 수 있습니다.
문서의 하위 집합을 일치시키려면 일치 기준 이 포함된 쿼리 필터 를 지정합니다. 일치 조건은 문서에서 일치시키려는 필드와 값으로 구성됩니다. 쿼리 필터에는 반환할 문서를 결정하기 위한 일치 기준 집합이 하나 이상 포함되어 있습니다. 찾기 작업에서 빈 쿼리 필터를 사용하면 드라이버는 컬렉션의 모든 문서를 일치시킵니다.
쿼리 필터하다 에서 리터럴 값 또는 쿼리 연산자를 사용하여 필드를 일치시킬 수 있습니다. 쿼리 연산자를 사용하면 수학적 또는 논리적 연산을 수행하여 컬렉션 내에서 문서를 찾을 수 있습니다.
리터럴 값을 사용하여 문서를 일치시키려면 다음 형식을 사용하세요.
let filter = doc! { "<field>": "<value>" };
쿼리 연산자를 포함하는 일치 조건을 만들려면 다음 형식을 사용하세요.
let filter = doc! { "<field>": doc! { "<operator>": "<value>" } };
다음 섹션의 예에서는 find()
메서드를 사용하여 collection의 문서와 일치하는 쿼리를 지정하는 방법을 보여 줍니다.
이 가이드에는 다음 섹션이 포함되어 있습니다.
예시용 샘플 데이터는 쿼리 예제에서 사용되는 샘플 데이터를 제공합니다.
리터럴 값 은 쿼리 필터에 제공한 값과 정확히 일치하는 데이터를 쿼리하는 방법을 설명합니다.
비교 는 컬렉션의 값과의 비교를 기반으로 데이터를 쿼리하는 방법을 설명합니다.
논리 는 필드 수준 연산자의 결과에 적용된 논리를 사용하여 데이터를 쿼리하는 방법을 설명합니다.
요소 는 필드의 유무 또는 유형에 따라 쿼리하는 방법을 설명합니다.
평가 는 컬렉션의 문서를 쿼리할 때 정규식 및 텍스트 검색과 같은 상위 수준 로직을 실행하는 방법을 설명합니다.
Bitwise 는 기본10 값의 해당 비트 세트를 기반으로 쿼리하는 방법을 설명합니다.
배열 은 배열 값 필드 내의 데이터를 기반으로 컬렉션을 쿼리하는 방법을 설명합니다.
추가 정보에서 이 가이드에 언급된 유형 및 메소드에 대한 리소스 및 API 문서 링크를 찾을 수 있습니다.
샘플 데이터
이 가이드의 예에서는 다음 샘플 문서를 사용합니다. 각 문서는 매장 재고에 있는 과일을 나타내며 수량에 대한 정보를 포함합니다. 일부 문서에는 과일 또는 그 공급업체를 설명하는 필드가 포함되어 있습니다.
struct Fruit { _id: String, name: String, quantity: i32, description: Option<String>, vendors: Option<Vec<String>> }
다음 섹션의 예시에서는 Fruit
구조체로 설명되는 문서 컬렉션을 쿼리합니다.
let docs = vec! [ Fruit { _id: 1.to_string(), name: "orange".to_string(), quantity: 7, description: None, vendors: None }, Fruit { _id: 2.to_string(), name: "apple".to_string(), quantity: 4, description: Some("Granny Smith".to_string()), vendors: None }, Fruit { _id: 3.to_string(), name: "banana".to_string(), quantity: 36, description: None, vendors: None }, Fruit { _id: 4.to_string(), name: "pear".to_string(), quantity: 28, description: None, vendors: vec!["A".to_string(), "C".to_string() ].into() }, ];
이 데이터를 컬렉션 에 삽입하는 방법을 학습 보려면 문서 삽입 가이드 를 참조하세요.
리터럴 값
리터럴 값 쿼리 필터를 사용하면 쿼리 필터에 제공한 값과 정확히 일치하는 데이터를 쿼리할 수 있습니다. 다음 작업은 리터럴 쿼리를 사용하여 "pear"
값을 가진 name
필드가 포함된 문서를 검색합니다.
let query = doc! { "name": "pear" }; let mut cursor = my_coll.find(query).await?; while let Some(doc) = cursor.try_next().await? { println!("{:?}", doc); }
Fruit { _id: "4", name: "pear", quantity: 28, description: None, vendors: Some(["A", "C"]) }
참고
리터럴 값 쿼리는 $eq
비교 연산자를 사용하는 쿼리와 동일하게 작동합니다. 예를 들어 다음 쿼리는 동일합니다.
my_coll.find(doc! { "price": doc! { "$eq": 5 } }).await?;
my_coll.find(doc! { "price": 5 }).await?;
비교
비교 연산자를 사용하면 문서를 쿼리 필터의 값과 비교하여 문서를 쿼리할 수 있습니다. 일반적인 비교 연산자로는 '보다 큰(greater than)' 비교를 위한 $gt
, '보다 작은(less than)' 비교를 위한 $lt
, '같지 않은(not equal to)' 비교를 위한 $ne
등이 있습니다.
예시
다음 작업은 비교 연산자 $gt
를 사용하여 quantity
값이 5
보다 큰 문서를 일치시킵니다.
// $gt means "greater than" let query = doc! { "quantity": doc! { "$gt": 5 } }; let mut cursor = my_coll.find(query).await?; while let Some(doc) = cursor.try_next().await? { println!("{:?}", doc); }
Fruit { _id: "1", name: "orange", quantity: 7, description: None, vendors: None } Fruit { _id: "3", name: "banana", quantity: 36, description: None, vendors: None } Fruit { _id: "4", name: "pear", quantity: 28, description: None, vendors: Some(["A", "C"]) }
비교 연산자에 대한 자세한 내용은 MongoDB Server 매뉴얼의 비교 쿼리 연산자 를 참조하세요.
논리
논리 연산자에는 최소 두 개의 일치 기준이 필요하며 이러한 기준 중 일부, 전부 또는 전혀 충족하지 않는 문서를 일치시킬 수 있습니다. 예를 들어 논리 연산자 $or
를 사용하여 $gt
(보다 큼) 비교 연산자 또는 리터럴 값 쿼리와 일치하는 문서를 쿼리할 수 있습니다.
예시
다음 작업은 논리 연산자 $and
을 사용하여 quantity
값이 보다 크고 10
로 나누어 떨어지는 문서를 일치시킵니다.3
let query = doc! { "$and": [ doc! { "quantity": doc! { "$gt": 10 } }, doc! { "quantity": doc! { "$mod": [ 3, 0 ] } } ] }; let mut cursor = my_coll.find(query).await?; while let Some(doc) = cursor.try_next().await? { println!("{:?}", doc); }
Fruit { _id: "3", name: "banana", quantity: 36, description: None, vendors: None }
참고
쿼리 필터에 여러 필드-값 쌍이 있는 리터럴 값 쿼리가 포함된 경우 드라이버는 모든 기준을 충족하는 문서를 일치시킵니다.
예를 들어 다음 쿼리는 동일한 결과를 생성합니다.
my_coll.find(doc! { "price": doc! { "$eq": 5 }, "quantity": doc! { "$gt": 4 } });
my_coll.find(doc! { "$and": [ doc! { "price": { "$eq": 5 }}, doc! { "quantity": { "$gt": 4 }} ] });
논리 연산자의 전체 목록은 서버 매뉴얼의 논리 쿼리 연산자 를 참조하세요.
요소
요소 연산자를 사용하면 지정된 필드의 유형을 기준으로 또는 문서에 지정된 필드가 포함된 경우 문서를 일치시킬 수 있습니다.
예시
다음 작업은 요소 연산자 $exists
를 사용하여 description
필드가 포함된 문서를 검색합니다.
let query = doc! { "description": doc! { "$exists": true } }; let mut cursor = my_coll.find(query).await?; while let Some(doc) = cursor.try_next().await? { println!("{:?}", doc); }
Fruit { _id: "2", name: "apple", quantity: 4, description: Some("Granny Smith"), vendors: None }
참고
이 가이드 의 문서를 설명하는 과일 구조체 는 두 필드에서 #[serde(skip_serializing_if = "Option::is_none")]
속성을 사용합니다. 이 속성은 값이 None
인 경우 필드 가 무시되도록 지정합니다. 이렇게 하면 $exists
쿼리 에서 None
의 description
값이 반환되는 것을 방지할 수 있습니다.
serialize_with 를 참조하세요. 자세한 내용은 Serde 속성을 참조하세요.
요소 연산자의 전체 목록은 MongoDB Server 매뉴얼의 요소 쿼리 연산자 를 참조하세요.
평가
평가 연산자는 개별 필드나 collection의 문서를 분석하여 특정 기준을 충족하는지 확인합니다. 각 평가 연산자는 서로 다른 기능을 수행합니다. 예를 들어 $mod
연산자는 필드 값에 대해 수학 연산을 수행하고, $where
연산자를 사용하면 JavaScript 표현식을 기준으로 값을 평가할 수 있습니다.
예시
다음 작업은 평가 연산자 $mod
를 사용하여 quantity
값이 3으로 나누어지는 값을 가진 문서를 검색합니다.
// $mod means "modulo" and checks if the remainder is a specific value let query = doc! { "quantity": doc! { "$mod": [ 3, 0 ] } }; let mut cursor = my_coll.find(query).await?; while let Some(doc) = cursor.try_next().await? { println!("{:?}", doc); }
Fruit { _id: "3", name: "banana", quantity: 36, description: None, vendors: None }
평가 연산자의 전체 목록은 서버 매뉴얼의 평가 쿼리 연산자 를 참조하세요.
비트 단위
비트 연산자는 숫자 필드를 밑이 10진수(십진법)인 숫자에서 해당하는 밑이 2진수(이진법)인 숫자로 변환합니다. 비트 연산자는 문서의 값이 사용자의 매치 기준의 값과 동일한 비트로 설정되어 있는지 확인합니다.
예시
다음 예시는 quantity
에 7
와 동일한 비트가 설정되어 바이너리로 00000111
에 해당하는 문서와 일치합니다.
let query = doc! { "quantity": doc! { "$bitsAllSet": 7 } }; let mut cursor = my_coll.find(query).await?; while let Some(doc) = cursor.try_next().await? { println!("{:?}", doc); }
Fruit { _id: "1", name: "orange", quantity: 7, description: None, vendors: None }
비트 연산자의 전체 목록은 MongoDB Server 매뉴얼의 비트 쿼리 연산자 를 참조하세요.
배열
배열 연산자는 배열 값 필드에 있는 요소의 값이나 양을 확인합니다.
예시
다음 예는 vendor
배열 필드에 "C"
가 포함된 문서와 일치합니다.
let query = doc! { "vendors": doc! { "$elemMatch": { "$eq": "C" } } }; let mut cursor = my_coll.find(query).await?; while let Some(doc) = cursor.try_next().await? { println!("{:?}", doc); }
Fruit { _id: "4", name: "pear", quantity: 28, description: None, vendors: Some(["A", "C"]) }
비트 연산자의 전체 목록은 서버 매뉴얼의 배열 쿼리 연산자 를 참조하세요.
추가 정보
찾기 작업에 대해 자세히 알아보려면 데이터 검색 가이드를 참조하세요.
쿼리 연산자에 대해 자세히 알아보려면 MongoDB Server 매뉴얼의 쿼리 선택기 를 참조하세요.
API 문서
이 가이드에 사용된 메서드 및 유형에 대해 자세히 알아보려면 다음 API 문서를 참조하세요.