English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
De acordo com o documento do MongoDB, MapReduce é um paradigma de processamento de dados usado para compactar grandes volumes de dados em resultados agregados úteis. O MongoDB usa o comando mapReduce para operações de mapReduce. O MapReduce é geralmente usado para processar conjuntos de dados grandes.
Aqui está a sintaxe básica do comando mapReduce-
>db.collection.mapReduce( function() { emit(key, value); }, //função map function(key, values) { return reduceFunction }, { //função reduce out: coleção query: documento sort: documento limit: número } )
map-A função reduce consulta primeiro a coleção, então mapeia os documentos de resultado para emitir chaves-pares de valores, e depois reduz conforme a chave com múltiplos valores.
Na sintaxe acima-
map
é uma função javascript que mapeia uma chave para um valor e emite uma chave-pares de valores
reduce
é uma função javascript usada para reduzir ou agrupar todos os documentos com a mesma chave
out
especificar map-a localização do resultado da consulta reduce
query
especificar o padrão de seleção opcional para documentos
sort
especificar o critério de ordenação opcional
limit
especificar o número máximo de documentos a serem retornados, opcionalmente
Considere a seguinte estrutura de documento para armazenar posts de usuários. O documento armazena o user_name e o status de publicação.
{ "post_text": "w"3codebox é um site excelente para tutoriais "user_name": "mark" "status": "ativo" }
Agora, vamos usarposts
Usando a função mapReduce na coleção para escolher todos os posts ativos, agrupá-los pelo user_name e contar o número de posts de cada usuário com o seguinte código-
>db.posts.mapReduce( function() { emit(this.user_id,1); }, function(key, values) {return Array.sum(values)}, { query:{status:"active"}, out:"post_total" } )
A consulta mapReduce acima gera os seguintes resultados-
{ "result": "post_total", "timeMillis": 9, "counts": "input": 4, "emit": 4, "reduce": 2, "output": 2 ,} "ok": 1,}
Os resultados mostram que há4um documento coincide com a consulta (status: "ativo"), a função map emite4Um documento com pares de chave-valor, o último função reduce divide os documentos mapeados com a mesma chave2unidades.}}
Para visualizar o resultado da consulta mapReduce, use o operador find-
>db.posts.mapReduce( function() { emit(this.user_id,1); }, function(key, values) {return Array.sum(values)}, { query:{status:"active"}, out:"post_total" } ).find()
A consulta acima deu os seguintes resultados, indicando que os usuários tom e mark têm dois posts ativos–
{ "_id" : "tom", "value" : 2 } { "_id" : "mark", "value" : 2 }
Da mesma forma, consultas MapReduce podem ser usadas para construir consultas de agregação complexas e grandes. O uso de funções JavaScript personalizadas aproveita o MapReduce, que é muito flexível e poderoso.