A classeAgregados fornece métodos de fábrica estáticos que constroem estágios de pipeline de agregação. Cada método retorna uma instância do tipo Bson, que por sua vez pode ser passada para o método MongoCollection.aggregate().
Você pode importar os métodos da classe Aggregates estaticamente, como mostrado no seguinte código:
import org.mongodb.scala.model.Aggregates._ 
Os exemplos deste guia pressupõem essa importação estática.
corresponder
O estágio de pipeline $match passa todos os documentos que correspondem ao filtro especificado para o próximo estágio. Embora o filtro possa ser uma instância de qualquer classe que Bson implemente, é melhor usar métodos da classe de classedo construtor de filtros.
O exemplo a seguir cria um estágio de pipeline que corresponde a todos os documentos onde o valor de campo author é "Dave":
`match`(equal("author", "Dave")) 
Observação
Como match é uma palavra reservada em Scala e deve ser evitada por backtiques, talvez você prefira usar o alias filter() :
filter(equal("author", "Dave")) 
Projeto
O estágio do pipeline $project passa os campos projetados de todos os documentos para o próximo estágio. Embora a projeção possa ser uma instância de qualquer classe que Bson implemente, é conveniente usar métodos da classe Classe do construtor de projeções.
O exemplo a seguir cria um estágio de pipeline que exclui o campo _id , mas inclui os campos title e author :
project(fields(include("title", "author"), excludeId())) 
Campos computados
O estágio $project também pode projetar campos calculados.
O exemplo a seguir projeta o campo qty em um novo campo chamado quantity. Em outras palavras, ele renomeia o campo:
project(computed("quantity", "$qty")) 
Amostra
O estágio do pipeline $sample seleciona aleatoriamente N documentos dos documentos de entrada. O exemplo seguinte utiliza o método sample() para selecionar aleatoriamente 5 documentos da coleção:
sample(5) 
Sort
O estágio de pipeline do $sort passa todos os documentos para o próximo estágio, classificados de acordo com os critérios de classificação especificados. Embora os critérios de classificação possam ser uma instância de qualquer classe que implemente Bson, é melhor usar métodos da classe Sorts Builder Class.
O exemplo a seguir cria um estágio de pipeline que classifica em ordem decrescente de acordo com o valor do campo age e, em seguida, em ordem crescente de acordo com o valor do campo posts:
sort(orderBy(descending("age"), ascending("posts"))) 
Ignorar
O estágio do pipeline $skip ignora o número especificado de documentos que passam para o estágio e passa os documentos restantes para o próximo estágio.
O exemplo a seguir ignora os primeiros 5 documentos:
skip(5) 
Limite
O estágio de pipeline do $limit limita o número de documentos passados para o próximo estágio.
O exemplo a seguir limita o número de documentos a 10:
limit(10) 
Pesquisa
O estágio de pipeline $lookup executa uma junção externa esquerda com outra collection para filtrar documentos da collection unida para processamento.
O exemplo a seguir executa uma junção externa esquerda na collection fromCollection , unindo o campo local ao campo from e saída no campo joinedOutput :
lookup("fromCollection", "local", "from", "joinedOutput") 
Grupo
O estágio de pipeline $group agrupa documentos por alguma expressão especificada e gera um documento para cada agrupamento distinto para o próximo estágio. Um grupo consiste em um _id que especifica a expressão na qual agrupar e zero ou mais acumuladores que são avaliados para cada agrupamento.
Para simplificar a expressão dos acumuladores, o driver inclui um objeto singleton Accumulators com métodos de fábrica para cada um dos acumuladores suportados.
O exemplo a seguir agrupa documentos pelo valor do campo customerId e, para cada grupo, acumula a soma e a média dos valores do campo quantidade nos campos totalQuantity e averageQuantity , respectivamente:
group("$customerId", sum("totalQuantity", "$quantity"), avg("averageQuantity", "$quantity")) 
Unwind
O estágio de pipeline $unwind desconstrói um campo de array a partir dos documentos de entrada para gerar um documento para cada elemento.
O exemplo a seguir gera, para cada documento, um documento para cada elemento da array sizes :
unwind("$sizes") 
O exemplo a seguir também inclui quaisquer documentos que tenham valores ausentes ou nulos para o campo sizes ou em que a lista sizes esteja vazia:
unwind("$sizes", UnwindOptions().preserveNullAndEmptyArrays(true)) 
O exemplo a seguir desenrola a array sizes e também gera o índice da array no campo position :
unwind("$sizes", UnwindOptions().includeArrayIndex("$position")) 
DefinirWindowFields
O estágio de pipeline $setWindowFields permite usar operadores de janela. Esse estágio particiona os documentos de entrada de forma semelhante ao estágio de pipeline $group, opcionalmente classifica-os, calcula campos nos documentos calculando funções de janela no Windows especificado por função e gera os documentos. Uma janela é um subconjunto de uma partição.
A diferença importante em relação ao estágio de pipeline $group é que os documentos pertencentes à mesma partição ou janela não são dobrados em um único documento.
O driver inclui o objeto singleton WindowedComputations com métodos de fábrica para operadores de janela compatíveis.
O exemplo a seguir calcula a precipitação acumulada e a temperatura média no mês passado para cada localidade a partir de medições mais refinadas apresentadas nos campos rainfall e temperature :
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))) 
Montando um pipeline
Os operadores de pipeline normalmente são combinados em uma lista e passados para o método aggregate() de um MongoCollection:
collection.aggregate(List(filter(equal("author", "Dave")),     group("$customerId", sum("totalQuantity", "$quantity"),                          avg("averageQuantity", "$quantity")),     out("authors")))