개요
이 가이드에서는 MongoDB .NET/C# 드라이버를 사용하여 집계 작업을 수행하는 방법을 배울 수 있습니다.
집계 작업은 MongoDB 컬렉션 데이터를 처리하고 계산된 결과를 반환합니다. MongoDB Aggregation 프레임워크는 데이터 처리 파이프라인 개념을 모델로 합니다. 문서는 하나 이상의 단계로 구성된 파이프라인에 들어가고, 이 파이프라인은 문서를 집계된 결과로 변환합니다.
.NET/ C# 드라이버 에서 지원하는 집계 단계에 대해 자세히 학습 애그리게이션 단계를 참조하세요.
팁
애그리게이션 튜토리얼 완료
서버 매뉴얼의 전체 집계 파이프라인 튜토리얼 섹션에서 일반적인 집계 작업에 대한 자세한 설명을 제공하는 튜토리얼을 찾을 수 있습니다. 튜토리얼을 선택한 다음 페이지 오른쪽 상단의 Select your language 드롭다운 메뉴에서 C# 를 선택합니다.
비유
애그리게이션 작업은 조립 라인이 있는 자동차 공장과 유사하게 작동합니다. 조립 라인에는 특정 작업을 수행하기 위한 특수 도구를 갖춘 스테이션이 있습니다. 예를 들어, 자동차를 만들 때 조립 라인은 프레임에서 시작됩니다. 그런 다음 자동차 프레임이 조립 라인을 이동할 때 각 스테이션은 별도의 부품을 조립합니다. 그 결과는 변형된 최종 제품, 즉 완성된 자동차입니다.
조립 라인은 집계 파이프라인, 개별 스테이션 은 집계 단계, 특수 도구 는 표현식 연산자, 완제품 은 집계된 결과 를 나타 냅니다 .
집계 및 찾기 연산 비교
다음 표에는 찾기 작업으로 수행할 수 있는 다양한 작업과 집계 작업으로 수행할 수 있는 작업이 나열되어 있습니다. 집계 프레임워크는 데이터를 변환하고 조작할 수 있는 확장된 기능을 제공합니다.
작업 찾기 | 집계 작업 |
|---|---|
반환할 특정 문서 선택 | 특정 문서를 선택하여 반환 |
서버 제한 사항
집계 작업을 수행할 때 다음 제한 사항을 고려합니다.
반환된 문서는 BSON 문서 크기 제한인 16메가바이트를 초과하지 않아야 합니다.
문제 해결
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 직렬화 속성 또는 직렬화 규칙을 인식하지 못하므로 이러한 메커니즘을 사용하여 필드 이름을 변경할 수 없습니다. 예시 들어 문서 에 [BsonElement("first_name")] 주석이 달린 FirstName 필드 포함된 경우 BsonDocument 또는 JSON 문자열 정의에서 해당 필드를 first_name 로 참조해야 합니다.
추가 정보
집계 단계의 전체 목록은 MongoDB Server 매뉴얼의 집계 단계 를 참조하세요.