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

Comando mapReduce de MongoDB

De acuerdo con el documento de MongoDB, MapReduce es un paradigma de procesamiento de datos utilizado para comprimir grandes cantidades de datos en resultados de agregación útiles. MongoDB utiliza el comando mapReduce para realizar operaciones de mapReduce. MapReduce se utiliza generalmente para procesar grandes conjuntos de datos.

Comando MapReduce

Aquí está la sintaxis básica de la orden mapReduce-

>db.colección.mapReduce(   
función() {emitir(key, valor);},  //la función map   
función(key, valores) {return funciónReduce}, {   //la función reduce
      salida: colección
      consulta: documento
      ordenar: documento
      límite: número
   }
)

map-La función reduce primero consulta la colección, luego mapea los documentos de los resultados para emitir claves-pares de valor, luego realiza una reducción según las claves que tienen múltiples valores.

en la sintaxis anterior-

  • map es una función javascript que mapea una clave a un valor y emite una clave-par

  • reducir es una función javascript que se utiliza para reducir o agrupar todos los documentos que tienen la misma clave

  • salida especificar map-ubicación del resultado de la consulta reduce

  • consulta especificar el criterio de selección opcional para seleccionar documentos

  • ordenar especificar la condición de ordenación opcional

  • límite especificar el número máximo de documentos a devolver opcionalmente

usando MapReduce

Considera la siguiente estructura de documento para almacenar los posts de usuarios. El documento almacena el user_name y el estado de publicación.

{
   "post_text": "w3codebox es un sitio web excelente para tutoriales
   "user_name": "mark",
   "estado":"activo"
}

Ahora, vamos apostsSe utiliza la función mapReduce en el conjunto para seleccionar todos los posts activos, agruparlos según user_name y luego contar el número de posts de cada usuario con el siguiente código-

>db.posts.mapReduce( 
   function() { emit(this.user_id,1); }, 
   function(key, values) { return Array.sum(values)}, {  
      query:{status:"active"},  
      out:"post_total" 
   }
)

La consulta mapReduce proporciona los siguientes resultados-

{
   "result": "post_total",
   "timeMillis": 9,
   "counts": {
      "input": 4,
      "emit": 4,
      "reduce": 2,
      "output": 2
   ,}
   "ok": 1,}

Los resultados muestran que en total hay4documento que coincide con la consulta (estado: "activo"), la función map emite4Un documento que tiene pares de clave-valor, el último función reduce divide los documentos que tienen la misma clave en2unidades.}}

Para ver los resultados de esta consulta MapReduce, utilice el 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()

La consulta superior proporcionó los siguientes resultados, lo que indica que los usuarios tom y mark tienen dos posts en estado activo–

{"_id" : "tom", "value" : 2 }
{"_id" : "mark", "value" : 2 }

De manera similar, las consultas MapReduce se pueden utilizar para construir consultas de agregación complejas y grandes. El uso de funciones de JavaScript personalizadas aprovecha MapReduce, que es muy flexible y potente.