애그리게이션을 통한 데이터 변환
개요
이 가이드 에서는 코틀린 동기 (Kotlin Sync) 운전자 를 사용하여 집계 작업 을 수행하는 방법을 학습 수 있습니다.
집계 작업을 사용하여 MongoDB 컬렉션의 데이터를 프로세스 하고 계산된 결과를 반환할 수 있습니다. 쿼리 API 의 일부인 MongoDB 애그리게이션 프레임워크 는 데이터 처리 파이프라인 개념을 모델로 합니다. 문서는 하나 이상의 단계를 포함하는 파이프라인 에 들어가고, 각 단계는 문서를 변환하여 최종 애그리게이션 결과를 출력합니다.
집계 작업은 자동차 공장과 유사하게 생각할 수 있습니다. 자동차 공장에는 조립 라인이 있으며, 여기에는 드릴 및 용접기와 같은 특정 작업을 수행할 수 있는 특수 도구를 갖춘 조립 스테이션이 있습니다. 원부품이 공장에 들어오면 조립 라인에서 이를 변형하고 조립하여 완제품으로 만듭니다.
집계 파이프라인은 조립 라인이고, 집계 단계는 조립 스테이션이며, 작업 연산자는 특수 도구입니다.
집계 및 찾기 연산 비교
찾기 조치를 사용하여 다음 조치을 수행할 수 있습니다:
반환할 문서 선택
반환할 필드 선택
결과 정렬
집계 조치를 사용하여 다음 조치를 수행할 수 있습니다:
찾기 작업 수행
필드 이름 바꾸기
필드 계산
데이터 요약
그룹 값
제한 사항
집계 작업을 사용할 때는 다음과 같은 제한 사항이 적용 됩니다.
반환된 문서는 BSON 문서 크기 제한인 16메가바이트를 초과하지 않아야 합니다.
파이프라인 단계의 메모리 제한은 기본값 100 메가바이트입니다.
AggregateIterable
클래스의allowDiskUse()
메서드를 사용하여 이 제한을 초과할 수 있습니다.
집계 예시
이 섹션의 예제에서는 Atlas 샘플 데이터 세트 의 sample_restaurants
데이터베이스 에 있는 restaurants
컬렉션 을 사용합니다. 무료 MongoDB Atlas cluster 를 생성하고 샘플 데이터 세트를 로드하는 방법을 학습 보려면 Atlas 시작하기 가이드 를 참조하세요.
다음 코틀린 (Kotlin) 데이터 클래스는 이 컬렉션 의 문서를 모델링합니다.
data class Restaurant( val name: String, val cuisine: String, val borough: String )
집계 파이프라인 빌드 및 실행
컬렉션 의 문서에 대해 집계 을 수행하려면 aggregate()
메서드에 집계 단계 목록을 전달합니다.
이 예시 는 뉴욕시 각 자치구에 있는 베이커리 수의 개수를 출력합니다. 다음 코드는 다음 단계를 포함하는 집계 파이프라인 을 생성합니다.
cuisine
필드 의 값이"Bakery"
인 문서를 필터하다 하는 $match 단계입니다.일치하는 문서를
borough
필드 별로 그룹 하여 해당 필드 의 각 고유 값에 대한 문서 수를 생성하는 $ 그룹 단계입니다.
val pipeline = listOf( Aggregates.match(Filters.eq(Restaurant::cuisine.name, "Bakery")), Aggregates.group("\$borough", Accumulators.sum("count", 1)) ) val results = collection.aggregate<Document>(pipeline) results.forEach { result -> println(result) }
Document{{_id=Bronx, count=71}} Document{{_id=Manhattan, count=221}} Document{{_id=Brooklyn, count=173}} Document{{_id=Queens, count=204}} Document{{_id=Staten Island, count=20}} Document{{_id=Missing, count=2}}
팁
$group
집계 단계에 대한 그룹 키를 지정할 때는 \
문자를 사용하여 $
문자를 이스케이프 처리해야 합니다.
애그리게이션 설명
MongoDB 가 작업을 실행하는 방법에 대한 정보를 보려면 파이프라인 에 $explain
집계 단계를 포함하면 됩니다. MongoDB 는 작업을 설명할 때 실행 계획 과 성능 통계를 반환합니다. 실행 계획은 MongoDB 가 작업을 완료할 수 있는 잠재적인 방법입니다. MongoDB 에 작업을 설명하도록 지시하면 MongoDB 가 작업에 대해 선택한 계획과 거부된 실행 계획을 모두 반환합니다.
다음 코드 예시 에서는 이전 섹션에 표시된 것과 동일한 집계 을 실행하고 $explain
단계를 추가하여 작업 세부 정보를 출력합니다.
print(collection.aggregate(pipeline).explain())
{ "explainVersion": "2", "queryPlanner": { "namespace": "sample_restaurants.restaurants" "indexFilterSet": false, "parsedQuery": { "cuisine": {"$eq": "Bakery"} }, "queryHash": "865F14C3", "planCacheKey": "0697561B", "optimizedPipeline": true, "maxIndexedOrSolutionsReached": false, "maxIndexedAndSolutionsReached": false, "maxScansToExplodeReached": false, "winningPlan": { ... } ... } ... }
추가 정보
표현식 연산자의 전체 목록을 보려면 MongoDB Server 매뉴얼에서 애그리게이션 연산자 를 참조하세요.
집계 파이프라인 을 어셈블하는 학습 에 대해 알아보고 예시를 보려면 MongoDB Server 매뉴얼에서 집계 파이프라인 을 참조하세요.
파이프라인 단계 생성에 학습 보려면 MongoDB Server 매뉴얼의 애그리게이션 단계 를 참조하세요.
MongoDB 작업에 학습 보려면 MongoDB Server 매뉴얼의 출력 및 쿼리 계획 설명을 참조하세요.
API 문서
코틀린( 코틀린 동기 (Kotlin Sync) 운전자 로 집계 작업을 실행하는 방법에 대한 자세한 내용은 다음 API 문서를 참조하세요.