Docs Menu
Docs Home
/ / /
C#/.NET
/

집계

이 페이지의 내용

  • 개요
  • 비유
  • 집계 및 찾기 연산 비교
  • 서버 제한 사항
  • 집계 예시
  • LINQ 접근 방식
  • 빌더 접근 방식
  • BsonDocument 접근 방식
  • 추가 정보
  • MongoDB Server 매뉴얼
  • API 문서

이 가이드에서는 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 메가바이트입니다. AggregateOptions 필요한 경우 Aggregate() 메서드에 전달하는 객체 의 AllowDiskUse 속성 을 설정하여 이 제한을 초과할 수 있습니다.

  • $graphLookup 단계는 100 메가바이트의 엄격한 메모리 제한을 가지며 AllowDiskUse 속성을 무시합니다.

집계를 수행하려면 집계 단계 목록을 IMongoCollection<TDocument>.Aggregate() 메서드에 전달합니다.

참고

이 예시 에서는 Atlas 샘플 데이터 세트sample_restaurants.restaurants 컬렉션 을 사용합니다. 무료 MongoDB Atlas cluster 를 생성하고 샘플 데이터 세트를 로드하는 방법을 학습 보려면 빠른 시작을 참조하세요.

다음 코드 예시는 뉴욕시의 각 자치구에 있는 빵집의 수를 계산합니다. 이를 위해 다음 단계가 포함된 집계 파이프라인을 사용합니다.

  • cuisine 필드에 "Bakery" 값이 포함된 문서를 필터링하는 $match 단계입니다.

  • 일치하는 문서를 borough 필드별로 그룹화하여 해당 필드의 각 고유 값에 대한 문서 수를 누적하는 $group 단계입니다.

다음 섹션에서는 예시 파이프라인에서 사용된 집계 단계를 만들고 결합하기 위해 LINQ, Builders 및 BsonDocument 접근 방식을 사용하여 이 예시를 구현합니다.

// 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);
}
{ _id = Bronx, Count = 71 }
{ _id = Brooklyn, Count = 173 }
{ _id = Staten Island, Count = 20 }
{ _id = Missing, Count = 2 }
{ _id = Manhattan, Count = 221 }
{ _id = Queens, Count = 204 }

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);
}
{ _id = Bronx, Count = 71 }
{ _id = Brooklyn, Count = 173 }
{ _id = Staten Island, Count = 20 }
{ _id = Missing, Count = 2 }
{ _id = Manhattan, Count = 221 }
{ _id = Queens, Count = 204 }

빌더를 사용하여 집계 파이프라인을 구성하는 방법에 대한 자세한 내용은 빌더와의 운영 가이드의 집계 파이프라인 빌드 섹션을 참조하세요.

// 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);
}
{ "_id" : "Brooklyn", "count" : 173 }
{ "_id" : "Manhattan", "count" : 221 }
{ "_id" : "Bronx", "count" : 71 }
{ "_id" : "Missing", "count" : 2 }
{ "_id" : "Staten Island", "count" : 20 }
{ "_id" : "Queens", "count" : 204 }

표현식 연산자의 전체 목록을 보려면 애그리게이션 연산자를 참조하세요.

집계 파이프라인을 조립하는 방법을 배우고 예시를 보려면 집계 파이프라인을 참조하세요.

파이프라인 단계 생성에 대해 자세히 알아보려면 애그리게이션 단계를 참조하세요.

MongoDB 집계 작업 설명에 대해 알아보려면 결과쿼리 계획 설명을 참조하세요.

이 가이드에서 설명하는 집계 작업에 대한 자세한 내용은 다음 API 문서를 참조하세요:

돌아가기

Kerberos(GSSAPI)