Nota
Pipeline de agregación como alternativa
A partir de MongoDB 5.0, map-reduce está obsoleto:
En lugar de map-reduce, deberías utilizar un Canalización de agregación. Las canalizaciones de agregación ofrecen mejor rendimiento y usabilidad que MapReduce.
Puede reescribir las operaciones de map-reduce utilizando etapas de canalización de agregación, como
$group, y$mergeotros.Para las operaciones map-reduce que requieren una funcionalidad personalizada, puedes utilizar los operadores de agregación
$accumulatory$function. Puedes utilizar esos operadores para definir expresiones de agregación personalizadas en JavaScript.
Para ejemplos de alternativas de pipeline de agregación a map-reduce, consulte:
Puedes ejecutar pipelines de agregación en la interfaz de usuario para implementaciones alojadas en MongoDB Atlas.
Map-reduce es un paradigma de procesamiento de datos para condensar grandes volúmenes de datos en resultados agregados útiles. Para realizar operaciones de map-reduce, MongoDB proporciona el comando de base de datos mapReduce.|
Considerar la siguiente operación map-reduce:
En esta operación map-reduce, MongoDB aplica la fase map a cada documento de entrada (es decir, los documentos en la colección que coinciden con la condición del query). La función map emite pares clave-valor. Para aquellas claves que tienen múltiples valores, MongoDB aplica la fase de reduce, que recopila y condensa los datos agregados. MongoDB almacena los resultados en una colección. Opcionalmente, la salida de la función de reducción puede pasar a través de una función de finalización para condensar o procesar aún más los resultados de la agregación.
Todas las funciones de map-reduce en MongoDB son JavaScript y se ejecutan dentro del proceso mongod. Las operaciones de map-reduce toman los documentos de una única colección como entrada y pueden realizar cualquier ordenación y limitación arbitraria antes de comenzar la etapa de mapeo. mapReduce puede devolver los resultados de una operación de map-reduce como un documento, o puede guardar los resultados en colecciones.
Nota
Map-reduce no es compatible con los clústeres gratuitos y flexibles de MongoDB Atlas.
Funciones de JavaScript de Map-Reduce
En MongoDB, las operaciones de map-reduce utilizan funciones JavaScript personalizadas para asignar, o asociar, valores a una clave. Si una clave tiene varios valores asignados a ella, la operación reduce los valores de la clave a un solo objeto.
El uso de funciones personalizadas de JavaScript proporciona flexibilidad a las operaciones de map-reduce. Por ejemplo, en el procesamiento de un documento, la función de mapeo puede crear más de una asignación de clave-valor o ninguna asignación. Las operaciones de map-reduce también pueden utilizar una función personalizada de JavaScript para realizar modificaciones finales en los resultados al término de la operación de mapeo y reducción, como realizar cálculos adicionales.
Resultados de Map-Reduce
En MongoDB, la operación map-reduce puede guardar resultados en una colección o devolver los resultados en línea. Si se guarda la salida de map-reduce en una colección, se pueden realizar operaciones map-reduce posteriores en la misma colección de entrada que reemplacen, combinen o reduzcan los nuevos resultados con los resultados anteriores. Consultar mapReduce y Realizar map-reduce incremental para obtener detalles y ejemplos.
Al devolver los resultados de una operación de map-reduce en línea, los documentos de resultados deben estar dentro del límite de tamaño del documento BSON, que actualmente es de 16 mebibytes. Para obtener información adicional sobre los límites y restricciones en las operaciones de map-reduce, se puede consultar la página de referencia de mapReduce (comando de base de datos).
Colecciones fragmentadas
MongoDB admite operaciones de map-reduce en colecciones particionadas.
Vistas
Las vistas no dan soporte a operaciones de map-reduce.