집계
이 페이지의 내용
개요
이 가이드에서는 MongoDB .NET/C# 드라이버를 사용하여 집계 작업을 수행하는 방법을 배울 수 있습니다.
집계 작업은 MongoDB 컬렉션 데이터를 처리하고 계산된 결과를 반환합니다. MongoDB Aggregation 프레임워크는 데이터 처리 파이프라인 개념을 모델로 합니다. 문서는 하나 이상의 단계로 구성된 파이프라인에 들어가고, 이 파이프라인은 문서를 집계된 결과로 변환합니다.
비유
애그리게이션 작업은 조립 라인이 있는 자동차 공장과 유사하게 작동합니다. 조립 라인에는 특정 작업을 수행하기 위한 특수 도구를 갖춘 스테이션이 있습니다. 예를 들어, 자동차를 만들 때 조립 라인은 프레임에서 시작됩니다. 그런 다음 자동차 프레임이 조립 라인을 이동할 때 각 스테이션은 별도의 부품을 조립합니다. 그 결과는 변형된 최종 제품, 즉 완성된 자동차입니다.
조립 라인은 집계 파이프라인, 개별 스테이션 은 집계 단계, 특수 도구 는 표현식 연산자, 완제품 은 집계된 결과 를 나타 냅니다 .
집계 및 찾기 연산 비교
다음 표에는 찾기 작업으로 수행할 수 있는 다양한 작업과 집계 작업으로 수행할 수 있는 작업이 나열되어 있습니다. 집계 프레임워크는 데이터를 변환하고 조작할 수 있는 확장된 기능을 제공합니다.
작업 찾기 | 집계 작업 |
---|---|
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 Group the results Rename fields Compute new fields Summarize data Connect and merge data sets |
서버 제한 사항
집계 작업을 수행할 때 다음 제한 사항을 고려합니다.
반환된 문서는 BSON 문서 크기 제한인 16메가바이트를 초과하지 않아야 합니다.
파이프라인 단계의 메모리 제한은 기본값 100 메가바이트입니다. 필요한 경우
Aggregate()
메서드에 전달하는AggregateOptions
객체 의 AllowDiskUse 속성 을 설정하여 이 제한을 초과할 수 있습니다.$graphLookup 단계는 100 메가바이트의 엄격한 메모리 제한을 가지며
AllowDiskUse
속성을 무시합니다.
집계 예시
집계를 수행하려면 집계 단계 목록을 IMongoCollection<TDocument>.Aggregate()
메서드에 전달합니다.
참고
이 예시에서는 Atlas 샘플 데이터 세트의 sample_restaurants.restaurants
컬렉션을 사용합니다. 무료 MongoDB Atlas cluster를 생성하고 샘플 데이터 세트를 로드하는 방법에 대한 자세한 내용은 빠른 시작을 참조하세요.
다음 코드 예시는 뉴욕시의 각 자치구에 있는 빵집의 수를 계산합니다. 이를 위해 다음 단계가 포함된 집계 파이프라인을 사용합니다.
cuisine
필드에"Bakery"
값이 포함된 문서를 필터링하는 $match 단계입니다.일치하는 문서를
borough
필드별로 그룹화하여 해당 필드의 각 고유 값에 대한 문서 수를 누적하는 $group 단계입니다.
다음 섹션에서는 예시 파이프라인에서 사용된 집계 단계를 만들고 결합하기 위해 LINQ, Builders 및 BsonDocument 접근 방식을 사용하여 이 예시를 구현합니다.
LINQ 접근 방식
// Defines a queryable collection object as a prerequisite to using LINQ var queryableCollection = collection.AsQueryable(); // Defines the query with $match and $group stages var query = queryableCollection .Where(r => r.Cuisine == "Bakery") .GroupBy(r => r.Borough) .Select(g => new { _id = g.Key, Count = g.Count() }); // Executes the query and prints the aggregated results foreach (var result in query.ToList()) { Console.WriteLine(result); }
LINQ를 사용하여 집계 파이프라인을 구성하는 방법에 대한 자세한 내용은 LINQ 가이드를 참조하세요.
빌더 접근 방식
// Defines the $match aggregation stage var matchFilter = Builders<Restaurant>.Filter.Eq(r => r.Cuisine, "Bakery"); // Defines the aggregation pipeline with the $match and $group aggregation stages var pipeline = new EmptyPipelineDefinition<Restaurant>() .Match(matchFilter) .Group(r => r.Borough, g => new { _id = g.Key, Count = g.Count() } ); // Executes the aggregation pipeline var results = collection.Aggregate(pipeline).ToList(); // Prints the aggregated results foreach (var result in results) { Console.WriteLine(result); }
빌더를 사용하여 집계 파이프라인을 구성하는 방법에 대한 자세한 내용은 빌더와의 운영 가이드의 집계 파이프라인 빌드 섹션을 참조하세요.
BsonDocument 접근 방식
// Defines the $match and $group aggregation stages var matchStage = new BsonDocument { { "$match", new BsonDocument { { "cuisine", "Bakery" } } } }; var groupStage = new BsonDocument { { "$group", new BsonDocument { { "_id", "$borough" }, { "count", new BsonDocument("$sum", 1) } } } }; // Executes the aggregation pipeline var pipeline = new[] { matchStage, groupStage }; var results = collection.Aggregate<BsonDocument>(pipeline).ToList(); // Prints the aggregated results foreach (BsonDocument result in results) { Console.WriteLine(result); }
추가 정보
MongoDB Server 매뉴얼
표현식 연산자의 전체 목록을 보려면 애그리게이션 연산자를 참조하세요.
집계 파이프라인을 조립하는 방법을 배우고 예시를 보려면 집계 파이프라인을 참조하세요.
파이프라인 단계 생성에 대해 자세히 알아보려면 애그리게이션 단계를 참조하세요.
API 문서
이 가이드에서 설명하는 집계 작업에 대한 자세한 내용은 다음 API 문서를 참조하세요: