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 |
---|---|
| Define o sinalizador |
| Direciona a saída para a collection especificada, em vez de retornar o conjunto de resultados. |
| Define o escopo da operação. |
| 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 |
---|---|
| Retorna o valor atual do sinalizador |
| Retorna a função do mapa como uma string. |
| Retorna o local de saída atual para a operação. |
| Retorna a função de redução como uma string. |
| Retorna o escopo atual da operação. |
| Retorna se as informações de tempo devem ser incluídas no resultado. |