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

Map-Reduce

Map-Reduce é um paradigma de processamento de dados para condensar grandes volumes de dados em resultados agregados.

Observação

A operação map-reduce está obsoleta. Aestrutura de agregação do fornece melhor desempenho e usabilidade do que as operações de map-reduce , e deve ser preferida para novos desenvolvimentos.

A map-reduce operation is issued on a collection view, as obtained from Collection#find method, by calling the map_reduce method on the view. O método map_reduce usa três argumentos: o mapeador, o redutor e as opções de map-reduce. O mapeador e o redutor devem ser fornecidos como strings contendo funções JavaScript.

Por exemplo, dada a seguinte coleção com valores de 1 a 10:

coll = client['foo']
10.times do |i|
coll.insert_one(v: i)
end

A seguinte invocação somará os valores menores que 6:

coll.find(v: {'$lt' => 6}).map_reduce(
'function() { emit(null, this.v) }',
'function(key, values) { return Array.sum(values) }',
).first['value']
# => 15.0

O método map_reduce retorna uma instância de Mongo::Collection::View::MapReduce - uma visualização de map-reduce que contém os parâmetros a serem utilizados para a operação. Para executar a operação, repita os resultados (usando, por exemplo, each, first ou to_a no objeto de visualização) ou invoque o método execute . O método execute emite a operação map-reduce, mas não retorna o conjunto de resultados do servidor, e é útil principalmente para quando a saída da operação é direcionada para uma collection da seguinte forma:

coll.find(...).map_reduce(...).out('destination_collection').execute

Observe que:

  • Se os resultados do map-reduce não forem direcionados para uma collection, eles serão chamados de recuperados em linha. Nesse caso, todo o conjunto de resultados deve caber no limite de tamanho do documento de 16 MiB BSON.

  • Se os resultados do map-reduce forem direcionados para uma collection e a visualização do map-reduce for iterada, o driver recuperará automaticamente a collection inteira e retornará seu conteúdo como o conjunto de resultados. A collection é recuperada sem classificação. Se o map-reduce for realizado em uma collection que não esteja vazia, o driver retornará os documento como eles existem na collection após a conclusão da operação de map-reduce, que pode incluir os documento que estavam na collection antes da operação de map-reduce.

coll.find(...).map_reduce(...).out('destination_collection').each do |doc|
# ...
end
coll.find(...).map_reduce(...).out(replace: 'destination_collection', db: 'db_name').each do |doc|
# ...
end

Dada uma visualização de map-reduce, ela pode ser configurada utilizando os seguintes métodos:

Método
Descrição

js_mode

Define o sinalizador jsMode para a operação.

out

Direciona a saída para a collection especificada, em vez de retornar o conjunto de resultados.

scope

Define o escopo da operação.

verbose

Define se as informações de tempo devem ser incluídas no resultado.

Os seguintes métodos de acesso são definidos no objeto de visualização:

Método
Descrição

js_mode

Retorna o valor atual do sinalizador jsMode .

map_function

Retorna a função do mapa como uma string.

out

Retorna o local de saída atual para a operação.

reduce_function

Retorna a função de redução como uma string.

scope

Retorna o escopo atual da operação.

verbose

Retorna se as informações de tempo devem ser incluídas no resultado.

Voltar

Agregação