Docs Menu
Docs Home
/ / /
Rust 드라이버
/ / /

쿼리 지정

이 페이지의 내용

  • 개요
  • 샘플 데이터
  • 리터럴 값
  • 비교
  • 논리
  • 요소
  • 평가
  • 비트 단위
  • 배열
  • 추가 정보

이 가이드에서는 문서의 하위 집합과 일치하도록 쿼리를 지정하는 방법을 배울 수 있습니다.

문서의 하위 집합을 일치시키려면 일치 기준 이 포함된 쿼리 필터 를 지정합니다. 일치 조건은 문서에서 일치시키려는 필드와 값으로 구성됩니다. 쿼리 필터에는 반환할 문서를 결정하기 위한 일치 기준 집합이 하나 이상 포함되어 있습니다. 찾기 작업에서 빈 쿼리 필터를 사용하면 드라이버는 컬렉션의 모든 문서를 일치시킵니다.

쿼리 필터에서 리터럴 값 또는 쿼리 연산자를 사용하여 필드를 일치시킬 수 있습니다. 쿼리 연산자를 사용하면 수학적 또는 논리적 연산을 수행하여 컬렉션 내에서 문서를 찾을 수 있습니다.

리터럴 값을 사용하여 문서를 일치시키려면 다음 형식을 사용하세요.

let filter = doc! { "<field>": "<value>" };

쿼리 연산자를 포함하는 일치 조건을 만들려면 다음 형식을 사용하세요.

let filter = doc! { "<field>": doc! { "<operator>": "<value>" } };

다음 섹션의 예에서는 find() 메서드를 사용하여 collection의 문서와 일치하는 쿼리를 지정하는 방법을 보여 줍니다.

이 가이드에는 다음 섹션이 포함되어 있습니다.

  • 예시용 샘플 데이터는 쿼리 예제에서 사용되는 샘플 데이터를 제공합니다.

  • 리터럴 값 은 쿼리 필터에 제공한 값과 정확히 일치하는 데이터를 쿼리하는 방법을 설명합니다.

  • 비교 는 컬렉션의 값과의 비교를 기반으로 데이터를 쿼리하는 방법을 설명합니다.

  • 논리 는 필드 수준 연산자의 결과에 적용된 논리를 사용하여 데이터를 쿼리하는 방법을 설명합니다.

  • 요소 는 필드의 유무 또는 유형에 따라 쿼리하는 방법을 설명합니다.

  • 평가 는 컬렉션의 문서를 쿼리할 때 정규식 및 텍스트 검색과 같은 상위 수준 로직을 실행하는 방법을 설명합니다.

  • Bitwise 는 기본10 값의 해당 비트 세트를 기반으로 쿼리하는 방법을 설명합니다.

  • 배열 은 배열 값 필드 내의 데이터를 기반으로 컬렉션을 쿼리하는 방법을 설명합니다.

  • 추가 정보에서 이 가이드에 언급된 유형 및 메소드에 대한 리소스 및 API 문서 링크를 찾을 수 있습니다.

이 가이드의 예에서는 다음 샘플 문서를 사용합니다. 각 문서는 매장 재고에 있는 과일을 나타내며 수량에 대한 정보를 포함합니다. 일부 문서에는 과일 또는 그 공급업체를 설명하는 필드가 포함되어 있습니다.

#[derive(Serialize, Deserialize, Debug)]
struct Fruit {
_id: String,
name: String,
quantity: i32,
#[serde(skip_serializing_if = "Option::is_none")]
description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
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);
}

참고

리터럴 값 쿼리는 $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);
}

비교 연산자에 대한 자세한 내용은 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);
}

참고

쿼리 필터에 여러 필드-값 쌍이 있는 리터럴 값 쿼리가 포함된 경우 드라이버는 모든 기준을 충족하는 문서를 일치시킵니다.

예를 들어 다음 쿼리는 동일한 결과를 생성합니다.

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);
}

참고

이 가이드 의 문서를 설명하는 과일 구조체 는 두 필드에서 #[serde(skip_serializing_if = "Option::is_none")] 속성을 사용합니다. 이 속성은 값이 None 인 경우 필드가 무시되도록 지정합니다. 이렇게 하면 $exists 쿼리에서 Nonedescription 값이 반환되는 것을 방지할 수 있습니다.

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);
}

평가 연산자의 전체 목록은 서버 매뉴얼의 평가 쿼리 연산자 를 참조하세요.

비트 연산자는 숫자 필드를 밑이 10진수(십진법)인 숫자에서 해당하는 밑이 2진수(이진법)인 숫자로 변환합니다. 비트 연산자는 문서의 값이 사용자의 매치 기준의 값과 동일한 비트로 설정되어 있는지 확인합니다.

다음 예시는 quantity7 와 동일한 비트가 설정되어 바이너리로 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);
}

비트 연산자의 전체 목록은 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);
}

비트 연산자의 전체 목록은 서버 매뉴얼의 배열 쿼리 연산자 를 참조하세요.

찾기 작업에 대해 자세히 알아보려면 데이터 조회 가이드를 참조하세요.

쿼리 연산자에 대해 자세히 알아보려면 MongoDB Server 매뉴얼의 쿼리 선택기 를 참조하세요.

이 가이드에 사용된 메서드 및 유형에 대해 자세히 알아보려면 다음 API 문서를 참조하세요.

돌아가기

Retrieve Data