Página inicial do Docs → Desenvolver aplicações → Manual do MongoDB
Map-Reduce e Coleções Fragmentadas
Observação
Pipeline de Agregação como uma Alternativa ao map-reduce
A partir do MongoDB 5.0, map-reduce está obsoleto:
Em vez de map-reduce, você deve usar um aggregation pipeline. aggregation pipeline fornece melhor desempenho e usabilidade do que a redução de mapa.
Você pode reescrever operações de redução de mapa utilizando estágios do pipeline de agregação, como
$group
,$merge
e outros.Para operações de map-reduce que exigem funcionalidade personalizada, você pode utilizar os operadores de agregação
$accumulator
e$function
. Você pode usar esses operadores para definir expressão de agregação personalizadas no JavaScript.
Para obter exemplos de alternativas de aggregation pipeline para map-reduce, consulte:
map-reduce oferece suporte a operações em collection fragmentadas, tanto como entrada quanto como saída. Esta seção descreve os comportamentos de mapReduce
específicos para collection fragmentadas.
No entanto, a partir da versão 4.2, MongoDB deprecia a opção map-reduce para criar uma nova collection fragmentada, bem como o uso da sharded
opção para map-reduce. Para gerar saída para uma collection fragmentada, crie primeiro a collection fragmentada. O MongoDB 4.2 também descontinua a substituição de uma collection fragmentada existente.
collection fragmentada como entrada
Ao utilizar a collection fragmentada como entrada para uma operação de map-reduce, o mongos
despachará automaticamente a tarefa de map-reduce para cada fragmento em paralelo. Não é necessária nenhuma opção especial. mongos
aguardará a conclusão das tarefas em todos os shards.
collection fragmentada como saída
Se o campo out
para mapReduce
tiver o valor sharded
, o MongoDB fragmentará a collection de saída usando o campo _id
como a chave de fragmento.
Observação
A partir da versão 4.2, o MongoDB descontinua o uso da opção sharded
para mapReduce
/db.collection.mapReduce()
.
Para gerar saída para uma collection fragmentada:
Se a collection de saída não existir, crie primeiro a collection fragmentada.
A partir da versão 4,2, MongoDB deprecia a opção map-reduce para criar uma nova collection fragmentada e o uso da
sharded
opção para map-reduce. Dessa forma, para gerar saída para uma collection fragmentada, crie primeiro a collection fragmentada.Se você não criou a collection fragmentada primeiro, o MongoDB criará e fragmentará a collection no campo
_id
. No entanto, é recomendável criar primeiro a collection fragmentada.A partir da versão 4.2, o MongoDB descontinua a substituição de uma collection fragmentada existente.
A partir da versão 4.0, se a collection de output já existir, mas não estiver fragmentada, o map-reduce falhará.
Para uma nova collection fragmentada ou vazia, o MongoDB utiliza os resultados do primeiro estágio da operação de map-reduce para criar as parte iniciais distribuídas entre os fragmentos.
mongos
despacha, em paralelo, uma tarefa de pós-processamento de redução de mapa para cada fragmento que possui um bloco. Durante o pós-processamento, cada fragmento extrairá os resultados para seus próprios blocos dos outros fragmentos, executará a redução/finalização final e gravará localmente na coleta de saída.
Observação
Durante a tarefa posterior de map-reduce, o MongoDB faz a divisão da parte conforme necessário.
O balanceamento de parte para a collection de saída é automaticamente evitado durante o pós-processamento para evitar problemas de simultaneidade.