Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

Límites de la canalización de agregación

Las operaciones de agregación con el comando aggregate presentan las siguientes limitaciones.

El comando aggregate puede devolver un cursor o almacenar los resultados en una colección. Cada documento en el conjunto de resultados está sujeto al 16 límite de tamaño de documento BSON de mebibytes. Si algún documento supera el límite de tamaño del documento BSON, la agregación produce un error. El límite solo se aplica a los documentos devueltos. Durante el Procesamiento de la pipeline, los documentos pueden exceder este tamaño. El db.collection.aggregate() método devuelve un cursor por defecto.

MongoDB limita el número de etapas de la canalización de agregación permitidas en un solo pipeline a 1000.

Si un pipeline de agregación supera el límite de etapa antes o después de ser analizada, se recibe un error.

A partir de MongoDB 6.0, el parámetro allowDiskUseByDefault controla si las etapas del pipeline que requieren más de 100 megabytes de memoria para ejecutarse guardan archivos temporales en disco por defecto.

  • Si allowDiskUseByDefault se establece en true, las etapas del pipeline que requieren más de 100 megabytes de memoria para ejecutarse guardan archivos temporales en el disco por defecto. Puedes desactivar la escritura de archivos temporales en el disco para comandos específicos find o aggregate utilizando la opción { allowDiskUse: false }.

  • Si allowDiskUseByDefault se establece en false, las etapas de la pipeline que requieren más de 100 megabytes de memoria para ejecutarse generan un error por defecto. Puedes habilitar la escritura de archivos temporales en disco para find o aggregate específicos usando la opción { allowDiskUse: true }.

La $search etapa de agregación no está restringida a 100 megabytes de RAM porque se ejecuta en un proceso separado.

Estos son algunos ejemplos de las etapas que pueden guardar archivos temporales en el disco cuando allowDiskUse está en true:

Nota

Las etapas del pipeline operan en flujos de documentos, donde cada etapa del pipeline toma documentos, los procesa y luego produce los documentos resultantes.

Algunas etapas no pueden generar ningún documento hasta que hayan procesado todos los documentos entrantes. Estas etapas del pipeline deben mantener su salida en la RAM hasta que se procesen todos los documentos entrantes. Como resultado, estas etapas de la pipeline pueden requerir más espacio que el límite de 100 MB.

Si los resultados de una de las etapas del pipeline $sort exceden el límite, se debe considerar agregar una etapa $limit.

Además del límite por etapa, una sola operación no puede utilizar más memoria que el límite de memoria por operación.

Los mensajes de registro del Perfilador y los mensajes de registro de diagnóstico incluyen un indicador usedDisk si alguna etapa de agregación guardó datos en archivos temporales debido a restricciones de memoria.

A partir de MongoDB 9.0, MongoDB limita la cantidad total de memoria que puede usar una sola operación de consulta. El límite se aplica a la memoria combinada de todas las etapas de la operación que se monitorizan.

La memoria rastreada incluye:

  • Etapas de bloqueo como $group y $sort

  • Evaluación de la expresión

  • Etapas de ejecución de consultas que almacenan registros en búfer, como búsquedas de proximidad geoespacial, recuentos que utilizan un índice y actualizaciones.

Por defecto, el límite es de 1 gigabytes o 20% de la memoria disponible para el proceso del servidor, lo que sea mayor. MongoDB establece el valor predeterminado al iniciar el servidor.

El límite por operación es independiente del límite de memoria de 100 megabytes por etapa y no modifica la forma en que las etapas se escriben en el disco. Para obtener más información sobre el límite por etapa, consulte Restricciones de memoria.

Si una operación supera el límite por operación, MongoDB finaliza la operación y devuelve uno de los siguientes errores:

  • QueryExceededMemoryLimitNoDiskUseAllowed cuando una etapa que puede volcarse al disco excede el límite y allowDiskUse es false. Ejecute la operación con { allowDiskUse: true } para que la etapa se volque al disco en lugar de fallar.

  • ExceededMemoryLimit para otras operaciones que superen el límite.

La mayoría de las operaciones utilizan mucha menos memoria que el límite. Si una operación devuelve un error de límite de memoria, reduzca la memoria que requiere realizando una o más de las siguientes acciones:

Para comprobar el uso de memoria por operación, utilice estas métricasserverStatus: