문서 메뉴
문서 홈
/ / /
Rust 드라이버
/

집계

이 페이지의 내용

  • 개요
  • 비유
  • 집계 및 찾기 연산 비교
  • 서버 제한 사항
  • 예제
  • 장르별 연령 인사이트
  • 시간 구성 요소별로 그룹화
  • 인기 장르 계산
  • 추가 정보
  • API 문서

이 가이드에서는 Rust 드라이버에서 애그리게이션 작업을 수행하는 방법을 배울 수 있습니다.

집계 작업은 집계 파이프라인 에서 설정할 수 있는 사양에 따라 MongoDB collection의 데이터를 처리합니다. 집계 파이프라인은 하나 이상의 단계 로 구성됩니다. 각 단계는 해당 표현식 연산자를 기반으로 작업을 수행합니다. 드라이버가 집계 파이프라인을 실행한 후 집계된 결과를 반환합니다.

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

  • 애그리게이션 비교 및 찾기 작업에서는 애그리게이션과 찾기 작업 간의 기능 차이점에 대해 설명합니다.

  • MongoDB 서버 제한 사항 은 애그리게이션 작업에 대한 메모리 사용량에 대한 서버 제한 사항을 설명합니다.

  • 예제 에서는 다양한 사용 사례에 대한 애그리게이션 예제를 제공합니다.

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

애그리게이션 작업은 조립 라인이 있는 자동차 공장과 유사하게 작동합니다. 조립 라인에는 특정 작업을 수행하기 위한 특수 도구를 갖춘 스테이션이 있습니다. 예를 들어, 자동차를 만들 때 조립 라인은 프레임에서 시작됩니다. 그런 다음 자동차 프레임이 조립 라인을 이동할 때 각 스테이션은 별도의 부품을 조립합니다. 그 결과는 변형된 최종 제품, 즉 완성된 자동차입니다.

조립 라인은 집계 파이프라인, 개별 스테이션 은 집계 단계, 특수 도구 는 표현식 연산자, 완제품 은 집계된 결과 를 나타 냅니다 .

다음 표에는 찾기 작업으로 수행할 수 있는 다양한 작업과 집계 작업으로 수행할 수 있는 작업이 나열되어 있습니다. 집계 프레임워크는 데이터를 변환하고 조작할 수 있는 확장된 기능을 제공합니다.

작업 찾기
집계 작업
Select certain documents to return
Select which fields to return
Sort the results
Limit the results
Count the results
Select certain documents to return
Select which fields to return
Sort the results
Limit the results
Count the results
Rename fields
Compute new fields
Summarize data
Connect and merge data sets

애그리게이션 작업을 수행할 때 다음과 같은 제한 사항을 고려하세요.

  • 반환된 문서는 BSON 문서 크기 제한인 16메가바이트를 초과하지 않아야 합니다.

  • 파이프라인 단계의 메모리 제한은 기본적으로 100 메가바이트입니다. 필요한 경우 allow_disk_use 를 설정하여 이 제한을 초과할 수 AggregateOptions 있습니다. 의 필드입니다.

  • $graphLookup 연산자는 100 메가바이트의 엄격한 메모리 제한이 있으며 allow_disk_use 설정을 무시합니다.

이 섹션의 예제에서는 다음 샘플 문서를 사용합니다. 각 문서는 서평 웹사이트의 사용자 프로필을 나타내며, 이름, 연령, 관심사 장르, 웹사이트에서 마지막으로 활동한 날짜에 대한 정보를 포함합니다.

{ "name": "Sonya Mehta", "age": 23, "genre_interests": ["fiction", "mystery", "memoir"], "last_active": { "$date": "2023-05-13T00:00:00.000Z" } },
{ "name": "Selena Sun", "age": 45, "genre_interests": ["fiction", "literary", "theory"], "last_active": { "$date": "2023-05-25T00:00:00.000Z" } },
{ "name": "Carter Johnson", "age": 56, "genre_interests": ["literary", "self help"], "last_active": { "$date": "2023-05-31T00:00:00.000Z" } },
{ "name": "Rick Cortes", "age": 18, "genre_interests": ["sci-fi", "fantasy", "memoir"], "last_active": { "$date": "2023-07-01T00:00:00.000Z" } },
{ "name": "Belinda James", "age": 76, "genre_interests": ["literary", "nonfiction"], "last_active": { "$date": "2023-06-11T00:00:00.000Z" } },
{ "name": "Corey Saltz", "age": 29, "genre_interests": ["fiction", "sports", "memoir"], "last_active": { "$date": "2023-01-23T00:00:00.000Z" } },
{ "name": "John Soo", "age": 16, "genre_interests": ["fiction", "sports"], "last_active": { "$date": "2023-01-03T00:00:00.000Z" } },
{ "name": "Lisa Ray", "age": 39, "genre_interests": ["poetry", "art", "memoir"], "last_active": { "$date": "2023-05-30T00:00:00.000Z" } },
{ "name": "Kiran Murray", "age": 20, "genre_interests": ["mystery", "fantasy", "memoir"], "last_active": { "$date": "2023-01-30T00:00:00.000Z" } },
{ "name": "Beth Carson", "age": 31, "genre_interests": ["mystery", "nonfiction"], "last_active": { "$date": "2023-08-04T00:00:00.000Z" } },
{ "name": "Thalia Dorn", "age": 21, "genre_interests": ["theory", "literary", "fiction"], "last_active": { "$date": "2023-08-19T00:00:00.000Z" } },
{ "name": "Arthur Ray", "age": 66, "genre_interests": ["sci-fi", "fantasy", "fiction"], "last_active": { "$date": "2023-11-27T00:00:00.000Z" } }

다음은 각 장르에 관심이 있는 사용자의 평균, 최소, 최대 연령을 계산하는 예시입니다.

애그리게이션 파이프라인에는 다음 단계가 포함됩니다:

  • genre_interests 필드의 각 배열 항목을 새 문서로 분리하는 $unwind 단계.

  • genre_interests 필드 값을 기준으로 문서를 그룹화하는 $group 단계입니다. 이 단계에서는 $avg, $min$max 연산자를 사용하여 평균, 최소, 최대 사용자 연령을 찾습니다.

let age_pipeline = vec![
doc! { "$unwind": doc! { "path": "$genre_interests" } },
doc! { "$group": doc! {
"_id": "$genre_interests",
"avg_age": doc! { "$avg": "$age" },
"min_age": doc! { "$min": "$age" },
"max_age": doc! { "$max": "$age" }
} }
];
let mut results = my_coll.aggregate(age_pipeline).await?;
while let Some(result) = results.try_next().await? {
let doc = mongodb::bson::from_document(result)?;
println!("* {:?}", doc);
}

다음 예에서는 매월 마지막으로 활성화된 사용자 수를 찾습니다.

애그리게이션 파이프라인에는 다음 단계가 포함됩니다:

  • last_active 필드의 월을 숫자로 month_last_active 필드에 추출하는 $project 단계.

  • month_last_active 필드를 기준으로 문서를 그룹화하고 각 월의 문서 수를 계산하는 $group 단계입니다.

  • 월에 오름차순 정렬을 설정하는 $sort 단계입니다.

let last_active_pipeline = vec![
doc! { "$project": { "month_last_active" : doc! { "$month" : "$last_active" } } },
doc! { "$group": doc! { "_id" : doc! {"month_last_active": "$month_last_active"} ,
"number" : doc! { "$sum" : 1 } } },
doc! { "$sort": { "_id.month_last_active" : 1 } }
];
let mut results = my_coll.aggregate(last_active_pipeline).await?;
while let Some(result) = results.try_next().await? {
let doc = mongodb::bson::from_document(result)?;
println!("* {:?}", doc);
}

다음 예에서는 사용자의 관심사에 표시되는 빈도를 기준으로 가장 인기 있는 세 가지 장르를 찾습니다.

애그리게이션 파이프라인에는 다음 단계가 포함됩니다:

  • genre_interests 필드의 각 배열 항목을 새 문서로 분리하는 $unwind 단계.

  • genre_interests 필드를 기준으로 문서를 그룹화하고 장르별 문서 수를 계산하는 $group 단계입니다.

  • 장르 인기도에 내림차순 정렬을 설정하는 $sort 단계.

  • 처음 세 장르만 보여주는 $limit 단계.

let popularity_pipeline = vec![
doc! { "$unwind" : "$genre_interests" },
doc! { "$group" : doc! { "_id" : "$genre_interests" , "number" : doc! { "$sum" : 1 } } },
doc! { "$sort" : doc! { "number" : -1 } },
doc! { "$limit": 3 }
];
let mut results = my_coll.aggregate(popularity_pipeline).await?;
while let Some(result) = results.try_next().await? {
let doc = mongodb::bson::from_document(result)?;
println!("* {:?}", doc);
}

이 가이드에 언급된 개념에 대해 자세히 알아보려면 다음 서버 매뉴얼 항목을 참조하세요.

aggregate() 메서드의 동작에 대해 자세히 알아보려면 데이터 조회 가이드의 애그리게이션 작업 섹션을 참조하세요.

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

돌아가기

스키마 유효성 검사

다음

색인