AI 에이전트의 경우: 문서 인덱스는 https://www.mongodb.com/ko-kr/docs/llms.txt에서 사용할 수 있으며, 모든 페이지의 마크다운 버전은 어떤 URL 경로에 .md를 추가하여 사용할 수 있습니다.
Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
MongoDB Branding Shape
Click here >
Docs Menu

문서 찾기

이 가이드에서는 읽기 작업 을 사용하여 MongoDB collection에서 데이터를 검색하는 방법에 대해 설명합니다. 읽기 작업은 서버에서 문서를 검색하는 명령입니다.

읽기 작업에는 두 가지 유형이 있습니다.

  • collection에서 문서를 검색할 수 있는 찾기 작업

  • collection의 데이터를 변환할 수 있는 애그리게이션 작업

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

  • 예제용 샘플 데이터는 읽기 작업 예제에서 사용되는 샘플 데이터를 제공합니다.

  • 찾기 작업 에서는 운전자 를 사용하여 찾기 작업을 실행하는 방법을 설명합니다.

  • 애그리게이션 작업 에서는 운전자 를 사용하여 집계 작업을 실행하는 방법을 설명합니다.

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

이 가이드 의 여러 예제에서는 다음 샘플 문서를 사용합니다. 각 문서 저장 재고에 있는 품목을 나타내며 분류 및 단가에 대한 정보를 포함합니다.

let docs = vec![
Inventory {
item: "candle".to_string(),
category: "decor".to_string(),
unit_price: 2.89,
},
Inventory {
item: "blender".to_string(),
category: "kitchen".to_string(),
unit_price: 38.49,
},
Inventory {
item: "placemat".to_string(),
category: "kitchen".to_string(),
unit_price: 3.19,
},
Inventory {
item: "watering can".to_string(),
category: "garden".to_string(),
unit_price: 11.99,
},
];

이 데이터를 컬렉션 에 삽입하는 방법을 학습 보려면 문서 삽입 가이드 를 참조하세요.

찾기 작업을 사용하여 MongoDB에서 데이터를 검색합니다. 찾기 작업은 find()find_one() 메서드로 구성됩니다.

기준과 일치 하는 모든 문서 를 찾으려면 find() 메서드를 사용합니다. 이 메서드는 쿼리 필터를 매개 변수로 사용합니다. 쿼리 필터는 문서가 일치시킬 기준을 형성하는 필드와 값으로 구성됩니다.

이 메서드는 필터 기준과 일치하는 문서를 검색하기 위해 반복할 수 있는 Cursor 유형을 반환합니다.

이 메서드를 사용하여 데이터를 검색하는 예제를 보려면 find() 예제를 참조하세요.

쿼리 지정에 대해 자세히 알아보려면 쿼리 지정 가이드를 참조하세요.

기준과 일치 하는 첫 번째 문서 를 찾으려면 find_one() 메서드를 사용합니다. 이 메서드는 쿼리 필터를 매개 변수로 사용합니다. 쿼리 필터는 문서가 일치시킬 기준을 형성하는 필드와 값으로 구성됩니다.

문서가 필터 기준과 일치하면 메서드는 값이 SomeResult<Option<T>> 유형을 반환합니다. 필터 기준과 일치하는 문서가 없는 경우 find_one() 는 값이 NoneResult<Option<T>> 유형을 반환합니다.

이 메서드를 사용하여 데이터를 조회 하는 예시 를 보려면 find_one() 예시 를 참조하세요.

FindOptions 옵션 빌더 메서드를 find() 에 연결하여 find() 메서드의 동작을 수정하고 FindOneOptions 옵션 빌더 메서드를 find_one() 에 연결하여 find_one() 메서드의 동작을 수정할 수 있습니다.

다음 표에서는 해당 빌더 메서드를 호출하여 설정하다 수 있는 일반적으로 사용되는 FindOptionsFindOneOptions 필드에 대해 설명합니다.

필드
설명

collation

결과를 정렬할 때 사용할 데이터 정렬입니다. 데이터 정렬에 대해 자세히 학습 데이터 정렬 가이드 참조하세요.

유형: Collation
기본값: None

hint

작업에 사용할 인덱스 입니다.인덱스에 대해 자세히 학습 서버 매뉴얼의 인덱스를 참조하세요.

유형: Hint
기본값: None

projection

결과를 반환할 때 사용할 프로젝션 . 프로젝션에 대해 자세히 학습 반환할 필드 지정 가이드 참조하세요.

유형: Document
기본값: None

read_concern

찾기 작업에 사용할 읽기 고려 (read concern) . 이 옵션을 설정하다 하지 않으면 작업은 컬렉션 에 대해 설정하다 읽기 고려 (read concern) 상속합니다. 읽기 고려에 대해 자세히 학습 서버 매뉴얼에서 읽기 고려를 참조하세요.

유형: ReadConcern

skip

결과를 반환할 때 건너뛸 문서 수입니다.skip() 빌더 메서드를 사용하는 방법에 대해 자세히 학습 건너뛰기를 참조하세요.

유형: u64
기본값: None

sort

결과를 반환할 때 사용할 정렬입니다.기본값 으로 운전자 문서를 기본 순서 대로 또는 데이터베이스 에 표시된 대로 반환합니다. 자세히 학습 서버 매뉴얼 용어집에서 기본 순서 참조하세요.sort() 빌더 메서드를 사용하는 방법에 대해 자세히 학습 정렬을 참조하세요.

유형: Document
기본값: None

참고

설정 옵션

옵션 빌더 메서드를 찾기 작업 메서드 호출에 직접 연결하여 FindOptionsFindOneOptions 필드를 설정하다 수 있습니다. 이전 버전의 운전자 를 사용하는 경우 옵션 빌더 메서드를 builder() 메서드에 연결하여 FindOptions 또는 FindOneOptions 인스턴스 를 구성해야 합니다. 그런 다음 옵션 인스턴스 를 find() 또는 find_one() 에 매개 변수로 전달합니다.

각 유형에 지정할 수 있는 설정의 전체 목록은 FindOptionsFindOneOptions에 대한 API 설명서를 참조하세요.

다음 섹션에는 find()find_one() 메서드를 사용하여 필터 기준과 일치하는 샘플 문서를 조회하는 예가 포함되어 있습니다.

이 예에서는 다음 조치를 수행합니다.

  • find() 메서드 호출

  • find() 값이 unit_price 보다 작고 이 아닌 문서와 일치하는 쿼리 필터하다 12.00 를 에 전달합니다.category "kitchen"

  • 일치하는 문서를 unit_price 기준으로 내림차순으로 정렬하기 위해 sort() 메서드를 find() 에 연결합니다.

let mut cursor = my_coll
.find(doc! { "$and": vec!
[
doc! { "unit_price": doc! { "$lt": 12.00 } },
doc! { "category": doc! { "$ne": "kitchen" } }
] })
.sort(doc! { "unit_price": -1 })
.await?;
while let Some(result) = cursor.try_next().await? {
println!("{:?}", result);
}
Inventory { item: "watering can", category: "garden", unit_price: 11.99 }
Inventory { item: "candle", category: "decor", unit_price: 2.89 }

이 예시 sample_restaurants 데이터베이스 의 restaurants 컬렉션 에서 쿼리 필터하다 와 일치하는 문서를 검색합니다. find() 메서드는 cuisine 필드 값이 "French"인 모든 문서를 반환합니다.

조회된 각 문서 Document 유형 또는 사용자 지정 데이터 유형 으로 모델링할 수 있습니다. 컬렉션의 데이터를 나타내는 데이터 유형 지정하려면 강조 표시된 줄의 <T> 유형 매개변수를 다음 값 중 하나로 바꿉니다.

  • <Document>: 컬렉션 문서를 BSON 문서로 조회하고 인쇄합니다.

  • <Restaurant>: 코드 상단에 정의된 Restaurant 구조체의 인스턴스로 컬렉션 문서를 조회하고 인쇄합니다.

Asynchronous 또는 Synchronous 탭을 선택하여 각 런타임에 해당하는 코드를 확인합니다.

use mongodb::{
bson::doc,
Client,
Collection
};
use futures::TryStreamExt;
use serde::{ Deserialize, Serialize };
#[derive(Serialize, Deserialize, Debug)]
struct Restaurant {
name: String,
cuisine: String,
}
#[tokio::main]
async fn main() -> mongodb::error::Result<()> {
let uri = "<connection string>";
let client = Client::with_uri_str(uri).await?;
// Replace <T> with the <Document> or <Restaurant> type parameter
let my_coll: Collection<T> = client
.database("sample_restaurants")
.collection("restaurants");
let mut cursor = my_coll.find(
doc! { "cuisine": "French" }
).await?;
while let Some(doc) = cursor.try_next().await? {
println!("{:#?}", doc);
}
Ok(())
}
use mongodb::{
bson::doc,
sync::{Client, Collection}
};
use serde::{ Deserialize, Serialize };
#[derive(Serialize, Deserialize, Debug)]
struct Restaurant {
name: String,
cuisine: String,
}
fn main() -> mongodb::error::Result<()> {
let uri = "<connection string>";
let client = Client::with_uri_str(uri)?;
// Replace <T> with the <Document> or <Restaurant> type parameter
let my_coll: Collection<T> = client
.database("sample_restaurants")
.collection("restaurants");
let mut cursor = my_coll.find(
doc! { "cuisine": "French" }
).run()?;
for result in cursor {
println!("{:#?}", result?);
}
Ok(())
}

컬렉션의 유형 매개변수에 따라 해당 코드 출력을 보려면 BSON Document Results 또는 Restaurant Struct Results 탭 선택합니다.

...
Some(
Document({
"_id": ObjectId(
"...",
),
...
"name": String(
"Cafe Un Deux Trois",
),
...
}),
),
Some(
Document({
"_id": ObjectId(
"...",
),
...
"name": String(
"Calliope",
),
...
}),
)
...
...
Restaurant {
name: "Cafe Un Deux Trois",
cuisine: "French",
}
Restaurant {
name: "Calliope",
cuisine: "French",
}
...

쿼리 필터 JSON 파일 에 저장 하고 런타임에 로드할 수 있습니다. 이 접근 방식을 사용하면 Rust 애플리케이션 과 외부 도구(예: MongoDB Shell (mongosh)) 간에 쿼리 정의를 주식 할 수 있습니다.

Serde JSON 종속성

파일 에서 쿼리 로드하기 전에 프로젝트 루트에서 다음 명령을 실행 하여 serde_json 종속성을 추가합니다.

cargo add serde_json

먼저 쿼리 필터하다 포함된 JSON 파일 만듭니다. 다음 샘플 query.json 파일 category 필드 값이 "kitchen"인 문서와 일치하는 비교 쿼리 필터하다 포함되어 있습니다.

query.json
{ "category": "kitchen" }

이 파일 Rust 애플리케이션 에 로드하려면 std::fs::read_to_string() 메서드를 사용하여 파일 읽습니다. 그런 다음 serde_json::from_str() 를 호출하여 JSON 문자열을 Document 인스턴스 로 구문 분석합니다. Documentserde::Deserialize 특성을 구현하므로 JSON 문자열에서 직접 역직렬화할 수 있습니다.

다음 예시 query.json 파일 에서 쿼리 필터하다 읽고 이를 find() 메서드에 전달합니다.

let json = std::fs::read_to_string("query.json")
.expect("failed to read query.json");
let filter: Document = serde_json::from_str(&json)
.expect("query.json contains invalid JSON");
let mut cursor = my_coll.find(filter).await?;
while let Some(doc) = cursor.try_next().await? {
println!("{:?}", doc);
}
Inventory { item: "blender", category: "kitchen", unit_price: 38.49 }
Inventory { item: "placemat", category: "kitchen", unit_price: 3.19 }

이 예에서는 다음 조치를 수행합니다.

  • find_one() 메서드 호출

  • unit_price 20.00보다 작거나 같은 문서와 일치하는 쿼리 필터하다 를 find_one() 에 전달합니다.

  • 일치하는 처음 두 문서를 건너뛰기 위해 skip() 메서드를 find_one() 으)로 연결합니다.

let result = my_coll
.find_one(doc! { "unit_price": doc! { "$lte": 20.00 } })
.skip(2)
.await?;
println!("{:#?}", result);
Some(
Inventory {
item: "watering can",
category: "garden",
unit_price: 11.99,
},
)

이 예시 sample_restaurants 데이터베이스 의 restaurants 컬렉션 에서 쿼리 필터하다 와 일치하는 문서 조회합니다. find_one() 메서드는 name 필드 의 값이 "Tompkins Square Bagels"인 첫 번째 문서 반환합니다.

조회된 문서 Document 유형 또는 사용자 지정 데이터 유형 으로 모델링할 수 있습니다. 컬렉션의 데이터를 나타내는 데이터 유형 지정하려면 강조 표시된 줄의 <T> 유형 매개변수를 다음 값 중 하나로 바꿉니다.

  • <Document>: 컬렉션 문서를 BSON 문서로 조회하고 인쇄합니다.

  • <Restaurant>: 코드 상단에 정의된 Restaurant 구조체의 인스턴스로 컬렉션 문서를 조회하고 인쇄합니다.

Asynchronous 또는 Synchronous 탭을 선택하여 각 런타임에 해당하는 코드를 확인합니다.

use mongodb::{
bson::doc,
Client,
Collection
};
use serde::{ Deserialize, Serialize };
#[derive(Serialize, Deserialize, Debug)]
struct Restaurant {
name: String,
cuisine: String,
}
#[tokio::main]
async fn main() -> mongodb::error::Result<()> {
let uri = "<connection string>";
let client = Client::with_uri_str(uri).await?;
// Replace <T> with the <Document> or <Restaurant> type parameter
let my_coll: Collection<T> = client
.database("sample_restaurants")
.collection("restaurants");
let result = my_coll.find_one(
doc! { "name": "Tompkins Square Bagels" }
).await?;
println!("{:#?}", result);
Ok(())
}
use mongodb::{
bson::doc,
sync::{Client, Collection}
};
use serde::{ Deserialize, Serialize };
#[derive(Serialize, Deserialize, Debug)]
struct Restaurant {
name: String,
cuisine: String,
}
fn main() -> mongodb::error::Result<()> {
let uri = "<connection string>";
let client = Client::with_uri_str(uri)?;
// Replace <T> with the <Document> or <Restaurant> type parameter
let my_coll: Collection<T> = client
.database("sample_restaurants")
.collection("restaurants");
let result = my_coll.find_one(
doc! { "name": "Tompkins Square Bagels" }
).run()?;
println!("{:#?}", result);
Ok(())
}

컬렉션의 유형 매개변수에 따라 해당 코드 출력을 보려면 BSON Document Result 또는 Restaurant Struct Result 탭 선택합니다.

Some(
Document({
"_id": ObjectId(
"...",
),
...
"name": String(
"Tompkins Square Bagels",
),
...
}),
)
Some(
Restaurant {
name: "Tompkins Square Bagels",
cuisine: "American",
},
)

애그리게이션 작업을 사용하여 collection에서 데이터를 검색하고 변환합니다. aggregate() 메서드를 사용하여 애그리게이션 작업을 수행할 수 있습니다.

aggregate() 메서드는 집계 파이프라인 을 매개 변수로 사용합니다. 집계 파이프라인에는 데이터를 변환하는 방법을 지정하는 하나 이상의 단계 가 포함됩니다. 단계에는 애그리게이션 연산자(접두사 $)와 해당 연산자에 대한 필수 매개변수가 포함됩니다.

애그리게이션에 대해 자세히 알아보고 애그리게이션 예제를 보려면 애그리 게이션 가이드를 참조하세요.

이 메서드는 결과 문서를 Cursor 유형으로 반환합니다. 집계 파이프라인에 $match 단계가 포함되어 있지 않은 경우 파이프라인은 컬렉션의 모든 문서를 처리합니다.

AggregateOptions 옵션 빌더 메서드를 aggregate() 에 연결하여 aggregate() 메서드의 동작을 수정할 수 있습니다.

다음 표에서는 해당 빌더 메서드를 호출하여 설정하다 수 있는 일반적으로 사용되는 AggregateOptions 필드에 대해 설명합니다.

필드
설명

allow_disk_use

임시 파일에 쓰기를 활성화합니다. 인 경우 true 집계 단계에서 _tmp 디렉토리 의 하위 디렉토리에 데이터를 쓰기 (write) 수 dbPath 있습니다.

유형: bool
기본값: false

batch_size

커서 배치 당 서버 반환하는 최대 문서 수를 지정합니다. 이 옵션은 커서 반환하는 문서 수 대신 커서 메모리에 보관하는 문서 수를 설정합니다.

유형: u32
기본값: 101 처음에는 문서, 16 MB 후속 배치에서는 최대 문서

collation

결과를 정렬할 때 사용할 데이터 정렬입니다. 데이터 정렬에 대해 자세히 학습 데이터 정렬 가이드 참조하세요.

유형: Collation
기본값: None

hint

작업에 사용할 인덱스 입니다.인덱스에 대해 자세히 학습 서버 매뉴얼의 인덱스를 참조하세요.

유형: Hint
기본값: None

read_concern

찾기 작업에 사용할 읽기 고려 (read concern) . 이 옵션을 설정하다 하지 않으면 작업은 컬렉션 에 대해 설정하다 읽기 고려 (read concern) 상속합니다. 읽기 고려에 대해 자세히 학습 서버 매뉴얼에서 읽기 고려를 참조하세요.

유형: ReadConcern

write_concern

작업에 대한 쓰기 고려 (write concern) . 이 옵션을 설정하다 하지 않으면 작업은 컬렉션 에 대해 설정하다 쓰기 고려 (write concern) 상속합니다. 쓰기 (write) 고려에 대해 자세히 학습 서버 매뉴얼에서 쓰기 고려를 참조하세요.

유형: WriteConcern

전체 설정 목록은 AggregateOptions에 대한 API 설명서를 참조하세요.

이 예시에서는 다음 단계가 포함된 파이프라인을 사용하여 aggregate() 메서드를 호출하는 방법을 보여 줍니다.

  • $group category 필드 의 각 값에 대해 unit_price 필드 의 평균을 계산하는 단계

  • $sort avg_price 기준으로 결과를 오름차순으로 정렬하는 단계

let pipeline = vec![
doc! { "$group": doc! { "_id" : doc! {"category": "$category"} ,
"avg_price" : doc! { "$avg" : "$unit_price" } } },
doc! { "$sort": { "_id.avg_price" : 1 } },
];
let mut cursor = my_coll.aggregate(pipeline).await?;
while let Some(result) = cursor.try_next().await? {
println!("{:?}", result);
}
Document({"_id": Document({"category": String("decor")}), "avg_price": Double(2.890000104904175)})
Document({"_id": Document({"category": String("kitchen")}), "avg_price": Double(20.840000867843628)})
Document({"_id": Document({"category": String("garden")}), "avg_price": Double(11.989999771118164)})

찾기 작업의 실행 가능한 예는 다음과 같은 사용의 예를 참조하세요.

이 가이드의 작업에 대해 자세히 알아보려면 다음 문서를 참조하세요.

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