Menu Docs
Página inicial do Docs
/ / /
Driver Ruby MongoDB
/

Agregação

Nesta página

  • O pipeline de agregação
  • Operações de agregação de finalidade única
  • Contar
  • distinto

Operações de framework de aggregation processam registros de dados e retornam resultados calculados. As operações de agregação agrupam valores de vários documentos e podem executar uma variedade de operações nos dados agrupados para gerar um único resultado.

O aggregation pipeline é uma framework para aggregation de dados modelada sobre o conceito de pipelines de processamento de dados. Os documentos entram em um pipeline em várias etapas que transforma os documentos em resultados agregados.

Para obter uma explicação completa e uma lista completa de estágios e operadores de pipeline, consulte o manual.

O exemplo a seguir usa o aggregation pipeline no conjunto de dados de amostra restaurants para localizar uma lista do número total de restaurantes 5 estrelas, agrupados por categoria de restaurante.

client = Mongo::Client.new([ '127.0.0.1:27017' ], :database => 'test')
coll = client['restaurants']
aggregation = coll.aggregate([
{ '$match'=> { 'stars'=> 5 } },
{ '$unwind'=> '$categories'},
{ '$group'=> { '_id'=> '$categories', 'fiveStars'=> { '$sum'=> 1 } } }
])
aggregation.each do |doc|
#=> Yields a BSON::Document.
end

Dentro do método aggregate , o primeiro estágio do pipeline filtra todos os documentos, exceto aqueles com 5 no campo stars . O segundo estágio desenrola o campo categories , que é uma array, e trata cada item na array como um documento separado. O terceiro estágio agrupa os documentos por categoria e adiciona o número de resultados de 5 estrelas correspondentes.

Os estágios do aggregation pipeline têm um limite máximo de uso de memória. Para lidar com grandes conjuntos de dados, defina a opção allowDiskUse como true para permitir a gravação de dados em arquivos temporários.

  • Você pode chamar o allow_disk_use método aggregation objeto para obter um novo objeto com o conjunto de opções:

aggregation = coll.aggregate([ <aggregration pipeline expressions> ])
aggregation_with_disk_use = aggregation.allow_disk_use(true)
  • Ou você pode passar uma opção para o método aggregate :

aggregation = coll.aggregate([ <aggregration pipeline expressions> ],
:allow_disk_use => true)

O MongoDB fornece métodos auxiliares para algumas funções de agregação, incluindo contagem e distinção.

O exemplo seguinte demonstra como utilizar o método count para localizar o número total de documentos que têm a array [ 'Chinese', 'Seafood' ] exata no campo categories .

client = Mongo::Client.new([ '127.0.0.1:27017' ], :database => 'test')
coll = client['restaurants']
aggregation = coll.count({ 'categories': [ 'Chinese', 'Seafood' ] })
count = coll.count({ 'categories' => [ 'Chinese', 'Seafood' ] })

Observação

O count método não é o mesmo que o countDocuments método e pode não suportar os mesmos filtros. countDocuments usa o $match estágio do agregação pipeline para filtrar documentos. Para saber mais sobre as limitações do $match estágio, consulte Restrições $match no manual do MongoDB Server .

O método auxiliar do distinct elimina os resultados que contêm valores e retorna um registro para cada valor único.

O exemplo seguinte retorna uma lista de valores únicos para o campo categories na collection restaurants :

client = Mongo::Client.new([ '127.0.0.1:27017' ], :database => 'test')
coll = client['restaurants']
aggregation = coll.distinct('categories')
aggregation.each do |doc|
#=> Yields a BSON::Document.
end

Voltar

Projeção