Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Menu Docs
Página inicial do Docs
/ / /
Driver Scala
/

Classe do Construtor de Agregados

The Aggregates class provides static factory methods that build aggregation pipeline stages. Each method returns an instance of the Bson type, which can in turn be passed to the MongoCollection.aggregate() method.

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.

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"))

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()))

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"))

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)

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")))

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)

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)

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")

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"))

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"))

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)))

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")))

Voltar

Classifica a Classe do Construtor

Nesta página