Operaciones de agregación con el aggregate El comando tiene las siguientes limitaciones.
Restricciones del tamaño de los resultados
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.
Restricciones en el número de etapas
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.
Restricciones de memoria
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
allowDiskUseByDefaultse establece entrue, 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íficosfindoaggregateutilizando la opción{ allowDiskUse: false }.Si
allowDiskUseByDefaultse establece enfalse, 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 parafindoaggregateespecí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:
$sortcuando la operación de ordenación no está soportada por un índice
Nota
Las etapas del pipeline operan en flujos de documentos, donde cada etapa del pipeline toma documentos, realizando su procesamiento y luego produciendo 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.
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.