Docs Menu
Docs Home
/ / /
Scala
/

집계

이 페이지의 내용

  • match
  • 프로젝트
  • 계산된 필드
  • Sample
  • Sort
  • Skip
  • Limit
  • Lookup
  • Group
  • Unwind
  • SetWindowFields
  • 파이프라인 조립

애그리게이션 클래스는 집계 파이프라인 단계 를 빌드 하는 정적 팩토리 메서드를 제공합니다. 각 메서드는 Bson 유형의 인스턴스 를 반환하며, 이 인스턴스는 MongoCollection.aggregate() 메서드로 전달될 수 있습니다.

다음 코드와 같이 Aggregates 클래스의 메서드를 정적으로 가져올 수 있습니다.

import org.mongodb.scala.model.Aggregates._

이 가이드의 예제에서는 이러한 정적 가져오기를 가정합니다.

$match 파이프라인 단계는 지정된 필터하다 와 일치하는 모든 문서를 다음 단계로 전달합니다. 필터하다 는 Bson 을 구현하는 모든 클래스의 인스턴스 가 될 수 있지만 Filters 클래스의 메서드를 사용하는 것이 편리합니다.

다음 예에서는 author 필드 값이 "Dave" 인 모든 문서와 일치하는 파이프라인 단계를 만듭니다.

`match`(equal("author", "Dave"))

참고

match 은 Scala 에서 예약어이고 역따옴표로 이스케이프되어야 하므로 filter() 별칭을 사용하는 것이 나을 수 있습니다.

filter(equal("author", "Dave"))

$project 파이프라인 단계는 모든 문서의 프로젝션된 필드를 다음 단계로 전달합니다. 프로젝션Bson 을 구현하는 모든 클래스의 인스턴스 가 될 수 있지만 프로젝션 클래스의 메서드를 사용하는 것이 편리합니다.

다음 예에서는 _id 필드를 제외하고 titleauthor 필드를 포함하는 파이프라인 단계를 만듭니다.

project(fields(include("title", "author"), excludeId()))

$project 단계는 계산된 필드도 프로젝션할 수 있습니다.

다음 예시 에서는 qty 필드 를 quantity 이라는 새 필드 에 프로젝션합니다. 즉, 필드 의 이름을 다음과 같이 변경합니다.

project(computed("quantity", "$qty"))

$sample 파이프라인 단계는 입력 문서에서 N 문서를 무작위로 선택합니다. 다음 예시 에서는 sample() 메서드를 사용하여 컬렉션 에서 5 문서를 무작위로 선택합니다.

sample(5)

$sort 파이프라인 단계는 모든 문서를 지정된 정렬 기준에 따라 정렬하여 다음 단계로 전달합니다. 정렬 기준은 Bson 을 구현하는 모든 클래스의 인스턴스 가 될 수 있지만 Sorts 클래스의 메서드를 사용하는 것이 편리합니다.

다음 예에서는 age 필드 값에 따라 내림차순으로 정렬한 다음 posts 필드 값에 따라 오름차순으로 정렬하는 파이프라인 단계를 만듭니다.

sort(orderBy(descending("age"), ascending("posts")))

$skip 파이프라인 단계에서는 해당 단계로 전달되는 지정된 수의 문서를 건너뛰고 나머지 문서를 다음 단계로 전달합니다.

다음 예시 에서는 처음 5 문서를 건너뜁니다.

skip(5)

$limit 파이프라인 단계는 다음 단계로 전달되는 문서 수를 제한합니다.

다음 예에서는 문서 수를 10)로 제한합니다.

limit(10)

$lookup 파이프라인 단계에서는 다른 컬렉션 과 왼쪽 외부 조인을 수행하여 조인된 컬렉션 의 문서를 필터하다 하여 처리 합니다.

다음 예시 에서는 fromCollection 컬렉션 에 대해 왼쪽 외부 조인을 수행하여 local 필드 를 from 필드 에 조인하고 joinedOutput 필드 에 출력합니다.

lookup("fromCollection", "local", "from", "joinedOutput")

$group 파이프라인 단계는 지정된 표현식 을 기준으로 문서를 그룹화하고 각 개별 그룹화에 대한 문서 를 다음 단계로 출력합니다. 그룹 은 그룹화할 표현식 을 지정하는 _id 와 각 그룹 에 대해 평가되는 0개 이상의 축적자로 구성됩니다.

축적자 표현을 단순화하기 위해 드라이버에는 지원되는 각 축적자에 대한 팩토리 메서드가 있는 Accumulators 싱글톤 객체가 포함되어 있습니다.

다음 예시 에서는 customerId 필드 값을 기준으로 문서를 그룹화하고, 각 그룹 에 대해 수량 필드 값의 합계와 평균을 totalQuantityaverageQuantity 필드에 각각 누적합니다.

group("$customerId", sum("totalQuantity", "$quantity"), avg("averageQuantity", "$quantity"))

$unwind 파이프라인 단계에서는 입력 문서에서 배열 필드 를 분해하여 각 요소에 대한 문서 를 출력합니다.

다음 예시에서는 각 문서에 대해 sizes 배열의 각 요소에 대한 문서를 출력합니다.

unwind("$sizes")

다음 예에는 sizes 필드에 누락된 값이나 null 값이 있거나 sizes 목록이 비어 있는 문서도 포함됩니다.

unwind("$sizes", UnwindOptions().preserveNullAndEmptyArrays(true))

다음 예에서는 sizes 배열을 풀고 배열 인덱스를 position 필드에 출력합니다.

unwind("$sizes", UnwindOptions().includeArrayIndex("$position"))

$setWindowFields 파이프라인 단계에서는 창 연산자를 사용할 수 있습니다. 이 단계에서는 $group 파이프라인 단계와 유사하게 입력 문서를 분할하고, 선택적으로 정렬하고, 함수별로 지정된 Windows 를 통해 창 함수를 계산하여 문서의 필드를 계산한 다음 문서를 출력합니다. 창 은 파티션의 하위 집합입니다.

$group 파이프라인 단계와의 중요한 차이점은 동일한 파티션이나 창에 속한 문서가 단일 문서로 접히지 않는다는 것입니다.

운전자 에는 지원되는 창 연산자에 대한 팩토리 메서드가 있는 WindowedComputations 싱글톤 객체 가 포함되어 있습니다.

다음 예시 에서는 rainfalltemperature 필드에 표시된 보다 세분화된 측정값을 통해 각 지역별 지난 달 누적 강우량과 평균 기온을 계산합니다.

val pastMonth: Window = Windows.timeRange(-1, MongoTimeUnit.MONTH, Windows.Bound.CURRENT)
setWindowFields(Some("$localityId"), Some(Sorts.ascending("measurementDateTime")),
WindowedComputations.sum("monthlyRainfall", "$rainfall", Some(pastMonth)),
WindowedComputations.avg("monthlyAvgTemp", "$temperature", Some(pastMonth)))

파이프라인 연산자는 일반적으로 목록으로 결합되어 MongoCollectionaggregate() 메서드에 전달됩니다.

collection.aggregate(List(filter(equal("author", "Dave")),
group("$customerId", sum("totalQuantity", "$quantity"),
avg("averageQuantity", "$quantity")),
out("authors")))

돌아가기

정렬