Definición
cursor.allowDiskUse()Importante
Método mongosh
Esta página documenta a
mongoshMétodo. Esta no es la documentación de un controlador específico del lenguaje, como Node.js.Para los drivers de API de MongoDB, consulte la documentación del driver de MongoDB específica del lenguaje.
Utilice para permitir o prohibir la escritura de archivos temporales en el disco cuando una etapa de la canalización supere
allowDiskUse()el 100 límite de megabytes. A partir de MongoDB,6.0 las operaciones que requieren más de 100 megabytes de memoria escriben datos automáticamente en archivos temporales de forma predeterminada.allowDiskUse()tiene la siguiente forma:db.collection.find(<match>).sort(<sort>).allowDiskUse()
Ver Clasificación y uso de índice para obtener más información sobre las operaciones de clasificación en memoria.
Compatibilidad
Este método está disponible en implementaciones alojadas en los siguientes entornos:
MongoDB Atlas: El servicio totalmente gestionado para implementaciones de MongoDB en la nube
Nota
Este comando es compatible con todos los clústeres de MongoDB Atlas. Para obtener información sobre el soporte de Atlas para todos los comandos, consulte Comandos no compatibles.
MongoDB Enterprise: La versión basada en suscripción y autogestionada de MongoDB
MongoDB Community: La versión de MongoDB con código fuente disponible, de uso gratuito y autogestionada.
Comportamiento
Interacción con allowDiskUseByDefault
A partir de MongoDB 6.0, las etapas de la pipeline que requieren más de 100 megabytes de memoria para ejecutarse guardan archivos temporales en el disco por defecto.
Nota
Antes de MongoDB 6.0, .allowDiskUse(false) y .allowDiskUse(true) tienen el mismo efecto. En MongoDB 6.0, tanto mongosh como el shell heredado mongo se comportan de la siguiente manera:
Si allowDiskUseByDefault está true (este es el valor por defecto):
.allowDiskUse()no tiene ningún efecto adicional.allowDiskUse(true)no tiene ningún efecto adicional.allowDiskUse(false)prohíbe que la query escriba archivos temporales en el disco
Si allowDiskUseByDefault falsees:
.allowDiskUse()permite escribir archivos temporales en el disco.allowDiskUse(true)permite escribir archivos temporales en el disco.allowDiskUse(false)no tiene ningún efecto adicional
Admite grandes ordenamientos no indexados solamente
cursor.allowDiskUse() no influye en las operaciones de ordenamiento respondidas mediante un índice o operaciones de ordenamiento sin índice ("en memoria") que requieran menos de 100 megabytes de memoria. Para una documentación más completa sobre la ordenación en memoria y el uso de índices de ordenación, consulte Uso de ordenación e índices.
Para comprobar si MongoDB debe realizar una ordenación en memoria, agrega cursor.explain() a la query y revisa los resultados de la explicación. Si el plan del query contiene una etapa SORT, MongoDB debe realizar una operación de ordenación en memoria sujeta al límite de memoria de 100 megabytes.
Ejemplo
Considere una colección sensors con solo el índice predeterminado _id. La colección contiene documentos similares a los siguientes:
{ "sensor-name" : "TEMP-21425", "sensor-location" : "Unit 12", "reading" : { "timestamp" : Timestamp(1580247215, 1), "value" : 212, "unit" : "Fahrenheit" } }
La siguiente operación incluye un cursor.sort() en el campo reading.timestamp. La operación también pasa false a cursor.allowDiskUse() para prohibir que la query escriba archivos temporales en el disco.
db.sensors.find({"sensor-location" : "Unit 12"}). sort({"reading.timestamp" : 1}). allowDiskUse(false)
Dado que reading.timestamp no está incluido en un índice, MongoDB debe realizar una operación de ordenamiento en memoria para devolver los resultados en el orden solicitado. Al especificar cursor.allowDiskUse(false), MongoDB no puede procesar la operación de ordenamiento si requiere más de 100 megabytes de memoria del sistema. Si la operación requiere más de 100 megabytes de memoria del sistema, MongoDB devolverá un error.