개요
이 가이드에서는 MongoDB .NET/C# 드라이버를 사용하여 집계 작업을 수행하는 방법을 배울 수 있습니다.
집계 작업은 MongoDB 컬렉션 데이터를 처리하고 계산된 결과를 반환합니다. MongoDB Aggregation 프레임워크는 데이터 처리 파이프라인 개념을 모델로 합니다. 문서는 하나 이상의 단계로 구성된 파이프라인에 들어가고, 이 파이프라인은 문서를 집계된 결과로 변환합니다.
.NET/ C# 드라이버 에서 지원하는 집계 단계에 대해 자세히 학습 애그리게이션 단계를 참조하세요.
팁
애그리게이션 튜토리얼 완료
비유
애그리게이션 작업은 조립 라인이 있는 자동차 공장과 유사하게 작동합니다. 조립 라인에는 특정 작업을 수행하기 위한 특수 도구를 갖춘 스테이션이 있습니다. 예를 들어, 자동차를 만들 때 조립 라인은 프레임에서 시작됩니다. 그런 다음 자동차 프레임이 조립 라인을 이동할 때 각 스테이션은 별도의 부품을 조립합니다. 그 결과는 변형된 최종 제품, 즉 완성된 자동차입니다.
조립 라인은 집계 파이프라인, 개별 스테이션 은 집계 단계, 특수 도구 는 표현식 연산자, 완제품 은 집계된 결과 를 나타 냅니다 .
집계 및 찾기 연산 비교
다음 표에는 찾기 작업으로 수행할 수 있는 다양한 작업과 집계 작업으로 수행할 수 있는 작업이 나열되어 있습니다. 집계 프레임워크는 데이터를 변환하고 조작할 수 있는 확장된 기능을 제공합니다.
작업 찾기 | 집계 작업 |
---|---|
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 속성 을 설정하여 이 제한을 초과할 수 있습니다.
문제 해결
Unsupported filter
or Expression not supported
Query API 에서 사용할 수 없는 LINQ 또는 빌더 표현식 사용하는 경우 Unsupported filter ...
또는 Expression not
supported ...
예외 메시지가 나타날 수 있습니다. 다음과 같은 경우 표현식 사용하지 못할 수 있습니다.
이에 상응하는 MongoDB 표현이 없는 .NET/ C# 기능 사용하려고 합니다. 예시 를 들어 .NET/ C# 과 MongoDB 데이터 정렬과 관련하여 서로 다른 의미를 가집니다.
운전자 LINQ 또는 빌더 표현식 에서 Query API 로의 특정 변환을 지원 하지 않습니다. 이는 제공된 쿼리 에 Query API 변환이 없거나 운전자 에 기능 구현되지 않았기 때문에 발생할 수 있습니다.
이러한 예외 중 하나가 발생하면 다음 단계를 시도해 보세요.
MongoDB C# 분석기 를 사용하여 표현식을 분석합니다.
가능하면 쿼리 간소화하세요.
쿼리
BsonDocument
객체 또는 JSON 문자열로 제공합니다.FilterDefinition
,ProjectionDefinition
및PipelineDefinition
와 같은 모든 정의 클래스는BsonDocument
객체 또는 JSON 문자열에서 암시적 변환을 지원 . 예시 들어 다음 필터는 쿼리 또는 집계 에 사용될 때 동일합니다.FilterDefinition<Entity> typedFilter = Builders<Entity>.Filter.Eq(e => e.A, 1); FilterDefinition<Entity> bsonFilter = new BsonDocument {{ "a", 1 }}; FilterDefinition<Entity> jsonFilter = "{ a : 1 }";
다음 예시 와 같이 동일한 쿼리 에서 BsonDocument
객체, JSON 문자열, POCO를 결합할 수 있습니다.
FilterDefinition<Entity> filter = Builders<Entity>.Filter .And(Builders<Entity>.Filter .Eq(e => e.A, 1), BsonDocument .Parse("{ b : 2 }"));
참고
BsonDocument
객체 또는 JSON 문자열을 사용하는 경우 필드 이름은 서버 에 저장된 대소문자를 구분하는 이름과 일치해야 합니다. 예시 들어 _id
필드 참조할 때는 필드 이름 _id
를 사용하여 참조해야 합니다.
Query API 수동 클래스 매핑, BSON 직렬화 속성 또는 직렬화 규칙을 인식하지 못하므로 이러한 메커니즘을 사용하여 필드 이름을 변경할 수 없습니다. 예시 들어 문서 에 주석이 달린 필드 FirstName
포함된 [BsonElement("first_name")]
경우 first_name
BsonDocument
또는 JSON 문자열 정의에서 해당 필드를 로 참조해야 합니다.
추가 정보
표현식 연산자의 전체 목록을 보려면 애그리게이션 연산자를 참조하세요.