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