Definición
cursor.allowDiskUse()Importante
Método mongosh
Esta página documenta una
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 Ordenar e indexar Utilice para obtener más información sobre las operaciones de ordenamiento 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 canalización que requieren más de 100 megabytes de memoria para ejecutarse escriben archivos temporales en el disco de manera predeterminada.
Nota
Antes de MongoDB 6.0, .allowDiskUse(false) y .allowDiskUse(true) tenían el mismo efecto. En MongoDB 6.0, tanto mongosh como el shell heredado mongo se comportan de la siguiente manera:
Si allowDiskUseByDefault es true (este es el valor predeterminado):
.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 únicamente ordenaciones grandes no indexadas
cursor.allowDiskUse() no afecta a las operaciones de ordenación que se responden mediante un índice o a las operaciones de ordenación no indexadas (en memoria) que requieren menos de 100 megabytes de memoria. Para obtener documentación más completa sobre las ordenaciones en memoria y el uso de índices de ordenación, consulte 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 en cursor.sort() el reading.timestamp campo. También pasa false a para impedir que la consulta escriba archivos temporales en cursor.allowDiskUse() 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.