English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Comando mapReduce do MongoDB

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.

Comando MapReduce

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

Usando MapReduce

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 usarpostsUsando 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.