unwind tutorial sirve que para metodo funcion framework ejemplo agregados agregacion mongodb aggregation-framework

sirve - mongodb aggregation tutorial



Mongodb explica para el marco de agregación (3)

Comenzando con MongoDB versión 3.0, simplemente cambiando el orden de

collection.aggregate(...).explain()

a

collection.explain().aggregate(...)

le dará los resultados deseados (documentación here ).

Para versiones anteriores> = 2.6, deberá usar la opción de explain para operaciones de canalización de agregación

explain:true

db.collection.aggregate([ { $project : { "Tags._id" : 1 }}, { $unwind : "$Tags" }, { $match: {$or: [{"Tags._id":"tag1"},{"Tags._id":"tag2"}]}}, { $group: { _id : "$_id", count: { $sum:1 } }}, {$sort: {"count":-1}} ], { explain:true } )

Una consideración importante con el Marco de agregación es que un índice solo puede utilizarse para obtener los datos iniciales de una interconexión (por ejemplo, uso de $match , $sort , $geonear al comienzo de una $geonear ), así como los siguientes $lookup y $graphLookup etapas de $graphLookup Una vez que los datos han sido ingresados ​​en la canalización de agregación para su procesamiento (por ejemplo, pasando por etapas como $project , $unwind y $group ), la manipulación adicional estará en la memoria (posiblemente utilizando archivos temporales si se establece la opción allowDiskUse ).

Optimización de tuberías

En general, puede optimizar las tuberías de agregación de la siguiente manera:

  • Iniciar una canalización con una etapa de $match para restringir el procesamiento a documentos relevantes.
  • Asegurar que las etapas iniciales de $sort / $sort sean compatibles con un índice eficiente .
  • Filtrando los datos temprano utilizando $match , $limit y $skip .
  • Minimizar etapas innecesarias y manipulación de documentos (tal vez reconsiderar su esquema si se requieren gimnasia de agregación complicada).
  • Aprovechando los nuevos operadores de agregación si ha actualizado su servidor MongoDB. Por ejemplo, MongoDB 3.4 agregó muchas nuevas etapas y expresiones de agregación, incluida la compatibilidad para trabajar con matrices, cadenas y facetas.

También hay una cantidad de optimizaciones de canalizaciones de agregación que suceden automáticamente dependiendo de la versión de su servidor MongoDB. Por ejemplo, las etapas adyacentes pueden fusionarse y / o reordenarse para mejorar la ejecución sin afectar los resultados de salida.

Limitaciones

Como en MongoDB 3.4, la opción de explain Marco de agregación proporciona información sobre cómo se procesa una interconexión, pero no admite el mismo nivel de detalle que el modo de executionStats para una consulta de búsqueda find() . Si está centrado en la optimización de la ejecución inicial de consultas, probablemente le resulte beneficioso revisar la consulta find().explain() equivalente con executionStats o allPlansExecution .

Hay algunas solicitudes de funciones relevantes para ver / votar en el rastreador de problemas de MongoDB con respecto a las estadísticas de ejecución más detalladas para ayudar a optimizar / perfilar las canalizaciones de agregación:

¿Hay una función de explicación para el marco de Agregación en MongoDB? No puedo verlo en la documentación.

Si no, ¿hay alguna otra manera de verificar cómo funciona una consulta dentro del marco de agregación?

Sé con encontrar que acaba de hacer

db.collection.find().explain()

Pero con el marco de agregación obtengo un error

db.collection.aggregate( { $project : { "Tags._id" : 1 }}, { $unwind : "$Tags" }, { $match: {$or: [{"Tags._id":"tag1"},{"Tags._id":"tag2"}]}}, { $group: { _id : { id: "$_id"}, "count": { $sum:1 } } }, { $sort: {"count":-1}} ).explain()


Comenzando con la versión 2.6.x mongodb permite a los usuarios explicar con el marco de agregación .

Todo lo que necesitas hacer es agregar la explicación: true

db.records.aggregate( [ ...your pipeline...], { explain: true } )

Gracias a Rafa, sé que era posible hacerlo incluso en 2.4, pero solo a través de runCommand() . Pero ahora puedes usar agregado también.


El marco de agregación es un conjunto de herramientas de análisis dentro de MongoDB que nos permite ejecutar varios tipos de informes o análisis en documentos en una o más colecciones. Basado en la idea de una tubería. Tomamos la información de una colección MongoDB y pasamos los documentos de esa colección a través de una o más etapas, cada una de las cuales realiza una operación diferente en sus entradas. Cada etapa toma como entrada cualquier etapa antes de que produzca como salida. Y las entradas y salidas para todas las etapas son una secuencia de documentos. Cada etapa tiene un trabajo específico que hace. Espera una forma específica de documento y produce un resultado específico, que a su vez es una secuencia de documentos. Al final de la tubería, tenemos acceso a la salida.

Una etapa individual es una unidad de procesamiento de datos. Cada etapa toma como entrada una secuencia de documentos de uno en uno, procesa cada documento de uno en uno y produce el flujo de salida de los documentos. De nuevo, uno a la vez. Cada etapa proporciona un conjunto de perillas o parámetros ajustables que podemos controlar para parametrizar el escenario para realizar cualquier tarea que nos interese hacer. Entonces, una etapa realiza una tarea genérica: una tarea de propósito general de algún tipo y parametriza el escenario para el conjunto particular de documentos con los que estamos trabajando. Y exactamente lo que quisiéramos que hiciera esa etapa con esos documentos. Estos parámetros ajustables suelen tomar la forma de operadores que podemos suministrar que modificarán campos, realizarán operaciones aritméticas, reestructurarán documentos o realizarán algún tipo de tarea de acumulación, así como una variedad de otras cosas. Muchas veces, es el caso que querremos incluir el mismo tipo de etapa varias veces dentro de una sola tubería.

Por ejemplo, es posible que deseemos realizar un filtro inicial para que no tengamos que pasar toda la colección a nuestro inventario. Pero luego, luego de un procesamiento adicional, quiere filtrar nuevamente utilizando un conjunto diferente de criterios. Entonces, para recapitular, la tubería funciona con una colección MongoDB . Están compuestos por etapas, cada una de las cuales realiza una tarea de procesamiento de datos diferente en su entrada y produce documentos como salida para pasar a la siguiente etapa. Y finalmente, al final de la producción de la tubería se produce que podemos hacer algo dentro de nuestra aplicación. En muchos casos, es necesario incluir el mismo tipo de etapa, varias veces dentro de una tubería individual.