Obsoleto desde la versión 1.12.
Novedad en la versión 1.2.
Definición
MongoDB\Collection::mapReduce()La El comando mapReduce te permite ejecutar operaciones de agregación map-reduce sobre una colección.
function mapReduce( MongoDB\BSON\JavascriptInterface $map, MongoDB\BSON\JavascriptInterface $reduce, string|array|object $out, array $options = [] ): MongoDB\MapReduceResult
Parámetros
$mapMongoDB\BSON\JavascriptUna función de JavaScript que asocia o "mapea" un valor con una clave y emite el par de clave y valor.
Nota
Pasar una instancia de JavaScript con un scope está obsoleto. Coloca todas las variables de alcance en la opción
scopede la operación MapReduce.$reduce:MongoDB\BSON\JavascriptUna función de JavaScript que "reduce" a un único objeto todos los valores asociados con una clave particular.
Nota
Pasar una instancia de JavaScript con un scope está obsoleto. Coloca todas las variables de alcance en la opción
scopede la operación MapReduce.$out: cadena|matriz|objeto- Especifica dónde exportar el resultado de la operación map-reduce. Puedes emitir a una colección o devolver el resultado en línea. En un miembro primario de un set de réplicas, puedes generar salida tanto a una colección como en línea, pero en un secundario, solo es posible la salida en línea.
$options: arregloUna matriz que especifica las opciones deseadas.
NombreTipoDescripciónbypassDocumentValidation
booleano
Si es
true, permite que la operación de escritura evite la validación a nivel de documento. El valor predeterminado esfalse.Esto solo aplica cuando los resultados se envían a una colección.
intercalación
arreglo|objeto
Laintercalación permite a los usuarios especificar reglas específicas del idioma para la comparación de cadenas, como el uso de mayúsculas y minúsculas y tildes. Al especificar la intercalación, el
localecampo es obligatorio; todos los demás campos son opcionales. Para obtener descripciones de los campos, consulte el documento de intercalación.Si la intercalación no está especificada pero la colección tiene una intercalación predeterminada, la operación utiliza la intercalación especificada para la colección. Si no se especifica una intercalación para la colección o para la operación, MongoDB utiliza la comparación binaria simple utilizada en versiones anteriores para comparar cadenas.
comment
mixto
Permite a los usuarios especificar un comentario arbitrario para ayudar a rastrear la operación a través del generador de perfiles de base de datos, la salidacurrentOp y los registros.
Novedades en la versión 1.13.
finaliza
Sigue el método de reducción y modifica la salida.
Pasar una instancia de JavaScript con un scope está obsoleto. Coloca todas las variables de alcance en la opción
scopede la operación MapReduce.jsMode
booleano
Especifica si se deben convertir los datos intermedios al formato BSON entre la ejecución de las funciones de mapa y reducción.
limit
entero
Especifica un número máximo de documentos para la entrada en la función de mapeo.
maxTimeMS
entero
El límite de tiempo acumulado en milisegundos para las operaciones de procesamiento en el cursor. MongoDB aborta la operación en el siguiente punto de interrupción..
Consulta
arreglo|objeto
Especifica los criterios de selección usando operadores del query para determinar los documentos de entrada en la función mapa.
readConcern
Nivel de consistencia de lectura para usar en la operación. Por defecto, adopta el nivel de consistencia de lectura de la colección.
No es posible especificar una preocupación de lectura para operaciones individuales como parte de una transacción. En su lugar, configure la
readConcernopción al iniciar la transacción.readPreference
Preferencia de lectura a utilizar para la operación. Por defecto, se utiliza la preferencia de lectura de la colección.
Esta opción se ignorará cuando los resultados se envíen a una colección.
Alcance
arreglo|objeto
Especifica variables globales a las que se puede acceder en las funciones map, reduce y finalize.
sesión
Sesión de cliente para asociar a la operación.
Nueva en la versión 1.3.
sort
arreglo|objeto
La especificación del orden para la clasificación de los resultados.
typeMap
arreglo
El mapa de tipos para aplicar a cursores, que determina cómo se convierten los documentos BSON en valores PHP. Por defecto, se utiliza el mapa de tipos de la colección.
verbose
booleano
Especifica si se debe incluir la información sobre el tiempo en la información del resultado.
writeConcern
nivel de confirmación de escritura (write concern) a usar en la operación. Por defecto, se aplica el nivel de confirmación de escritura (write concern) de la colección.
No es posible especificar una preocupación de escritura para operaciones individuales como parte de una transacción. En su lugar, configure la
writeConcernopción al iniciar la transacción.
Return Values
A Objeto MongoDB\MapReduceResult, que permite la iteración de los resultados de map-reduce independientemente del método de salida (p. ej., en línea, colección) a través de la interfaz IteratorAggregate. También brinda acceso a estadísticas de comandos.
Errores/Excepciones
MongoDB\Exception\UnsupportedException si se utilizan opciones que no son compatibles con el servidor seleccionado (porcollation readConcernwriteConcernejemplo,,,).
MongoDB\Exception\InvalidArgumentException por errores relacionados con el análisis de parámetros u opciones.
MongoDB\Exception\UnexpectedValueException si la respuesta del comando del servidor era incorrecta.
MongoDB\Driver\Exception\RuntimeException para otros errores en el nivel de extensión (por ejemplo, errores de conexión).
Comportamiento
En MongoDB, la operación de map-reduce puede guardar los resultados en una colección o devolver los resultados en línea. Si escribes la salida de map-reduce en una colección, puedes realizar operaciones posteriores de map-reduce en la misma colección de entrada que reemplacen la fusión, fusionen o reduzcan nuevos resultados con los resultados anteriores. Consulta Map-Reduce y Ejecutar Map-Reduce incremental para obtener detalles y ejemplos.
Al devolver los resultados de una operación map-reduce en línea, los documentos de resultado deben estar dentro del límite de Tamaño del documento BSON, que actualmente es de 16 megabytes.
MongoDB admite operaciones de map-reduce en colecciones fragmentadas. Estas operaciones también pueden generar los resultados en una colección fragmentada. Consulte Map-Reduce y Colecciones Fragmentadas.
Ejemplo
Este ejemplo utilizará poblaciones de ciudades para calcular la población total de cada estado.
$collection = (new MongoDB\Client)->test->zips; $map = new MongoDB\BSON\Javascript('function() { emit(this.state, this.pop); }'); $reduce = new MongoDB\BSON\Javascript('function(key, values) { return Array.sum(values) }'); $out = ['inline' => 1]; $populations = $collection->mapReduce($map, $reduce, $out); foreach ($populations as $pop) { var_dump($pop); };
La vista de salida se ilustraría como sigue:
object(stdClass)#2293 (2) { ["_id"]=> string(2) "AK" ["value"]=> float(544698) } object(stdClass)#2300 (2) { ["_id"]=> string(2) "AL" ["value"]=> float(4040587) } object(stdClass)#2293 (2) { ["_id"]=> string(2) "AR" ["value"]=> float(2350725) } object(stdClass)#2300 (2) { ["_id"]=> string(2) "AZ" ["value"]=> float(3665228) }
Ver también
mapReduce referencia del comando en el manual de MongoDB
Map-Reduce documentación en el manual de MongoDB