개요
이 가이드에서는 컬렉션에 있는 문서 수를 정확하게 추정하여 집계하는 방법에 대해 알아볼 수 있습니다.
샘플 데이터
이 가이드의 예에서는 students 컬렉션의 다음 문서를 사용합니다.
{ "_id": 1, "name": "Jonathon Howard ", "finalGrade": 87.5 } { "_id": 2, "name": "Keisha Freeman", "finalGrade": 12.3 } { "_id": 3, "name": "Wei Zhang", "finalGrade": 99.0 } { "_id": 4, "name": "Juan Gonzalez", "finalGrade": 85.5 } { "_id": 5, "name": "Erik Trout", "finalGrade": 72.3 } { "_id": 6, "name": "Demarcus Smith", "finalGrade": 88.8 }
다음 Student 클래스는 아래 컬렉션에 있는 문서를 모델링합니다.
public class Student { public int Id { get; set; } public string Name { get; set; } public double FinalGrade { get; set; } }
참고
students 컬렉션의 문서는 카멜 케이스 명명 규칙을 사용합니다. 이 가이드의 예시에서는 ConventionPack 사용하여 컬렉션의 필드를 파스칼식 대/소문자로 역직렬화하고 Student 클래스의 속성에 매핑합니다.
사용자 지정 직렬화에 대해 자세히 알아보려면 사용자 지정 직렬화를참조하세요.
정확한 카운트
쿼리 필터와 일치하는 문서 수를 계산하려면 CountDocuments() 메서드를 사용하세요. 빈 쿼리 필터를 전달하는 경우 이 메서드는 컬렉션에 있는 총 문서 수를 반환합니다.
예시
다음 예에서는 finalGrade가 80보다 작은 문서 수를 계산합니다.
var filter = Builders<Student>.Filter.Lt(s => s.FinalGrade, 80.0); var count = _myColl.CountDocuments(filter); Console.WriteLine("Number of documents with a final grade less than 80: " + count);
Number of documents with a final grade less than 80: 2
동작 수정
CountOptions 유형을 매개 변수로 전달하여 CountDocuments()의 동작을 수정할 수 있습니다. 옵션을 지정하지 않으면 드라이버는 기본값을 사용합니다.
CountOptions 객체에서 다음 속성을 설정할 수 있습니다.
속성 | 설명 |
|---|---|
| 결과를 정렬할 때 사용할 언어 데이터 정렬 유형입니다. 자세한 내용은 이 페이지의 데이터 정렬 섹션을 참조하세요. |
| 계산할 문서를 스캔하는 데 사용할 인덱스 입니다. |
| 계산할 문서의 최대 개수입니다. |
| 서버 에서 쿼리 실행 수 있는 최대 시간입니다. |
| 계산하기 전에 건너뛸 문서 수입니다. |
팁
CountDocuments()를 사용하여 컬렉션의 총 문서 수를 반환하면 MongoDB는 컬렉션 스캔을 수행합니다. _id 필드에 기본 제공되는 인덱스를 활용에 대한 힌트를 참고하여 컬렉션 스캔을 피하고 이 메서드의 성능을 향상시킬 수 있습니다. 빈 쿼리 매개 변수를 사용하여 CountDocuments()를 호출할 때만 이 방법을 사용합니다.
var filter = Builders<Student>.Filter.Empty; CountOptions opts = new CountOptions(){Hint = "_id_"}; var count = collection.CountDocuments(filter, opts);
데이터 정렬
작업에 대한 데이터 정렬을 구성하려면 데이터 정렬 클래스의 인스턴스를 만듭니다.
다음 표에서는 Collation 생성자가 허용하는 매개변수에 대해 설명합니다. 또한 각 설정의 값을 읽는 데 사용할 수 있는 해당 클래스 속성 도 나열되어 있습니다.
Parameter | 설명 | 클래스 속성 |
|---|---|---|
| 유니코드용 국제 구성 요소(ICU) 국가 및 언어 설정 및 언어 설정을 지정합니다. 지원되는 국가 및 언어 설정 목록은 MongoDB Server |
|
| (선택 사항) 대소문자 비교를 포함할지 여부를 지정합니다. |
|
| (선택 사항) 3차 수준 비교 시 대소문자 차이의 정렬 순서를 지정합니다. |
|
| (선택 사항) ICU 문서에 정의된 |
|
| (선택 사항) 운전자 숫자 문자열을 숫자로 비교할지 여부를 지정합니다. |
|
| (선택 사항) 운전자 비교를 위해 공백과 문장 부호를 기본 문자로 간주할지 여부를 지정합니다. |
|
| (선택 사항) 인수가 일 때 운전자 무시할 수 있는 것으로 간주하는 |
|
| (선택 사항) 운전자 필요에 따라 텍스트를 정규화할지 여부를 지정합니다. |
|
| (선택 사항) 분음 부호가 포함된 문자열을 문자열 뒤쪽에서 앞쪽으로 정렬할지 여부를 지정합니다. |
|
데이터 정렬에 대한 자세한 내용은 MongoDB Server 매뉴얼의 데이터 정렬 페이지를 참조하세요.
예상 개수
컬렉션의 총 문서 수를 추정하려면 EstimatedDocumentCount() 메서드를 사용합니다.
참고
EstimatedDocumentCount() 메서드는 전체 컬렉션을 스캔하는 대신 컬렉션의 메타데이터를 사용하기 때문에 CountDocuments() 메서드보다 빠릅니다.
동작 수정
EstimatedDocumentCountOptions 유형을 매개 변수로 전달하여 EstimatedDocumentCount()의 동작을 수정할 수 있습니다. 옵션을 지정하지 않으면 드라이버는 기본값을 사용합니다.
EstimatedDocumentCountOptions 객체에서 다음 속성을 설정할 수 있습니다.
속성 | 설명 |
|---|---|
| 서버 에서 쿼리 실행 수 있는 최대 시간입니다. |
예시
다음 예는 students 컬렉션의 문서 수를 추정하는 예입니다:
var count = _myColl.EstimatedDocumentCount(); Console.WriteLine("Estimated number of documents in the students collection: " + count);
Estimated number of documents in the students collection: 6
집계
Count() 빌더 메서드를 사용하여 집계 파이프라인의 문서 수를 계산할 수 있습니다.
예시
다음 예시에서는 다음 작업을 수행합니다:
FinalGrade값이80보다 큰 문서를 찾기 위한 일치 단계 지정기준과 일치하는 문서의 수 계산
var filter = Builders<Student> .Filter.Gt(s => s.FinalGrade, 80); var result = _myColl.Aggregate().Match(filter).Count(); Console.WriteLine("Number of documents with a final grade more than 80: " + result.First().Count);
Number of documents with a final grade more than 80: 4
추가 정보
언급된 작업에 대해 자세히 알아보려면 다음 가이드를 참조하세요.
API 문서
이 가이드에서 설명하는 메서드나 유형에 대해 자세히 알아보려면 다음 API 설명서를 참조하세요.