Definición
cursor.allowDiskUse()Importante
Método mongosh
Esta página documenta un método.
mongoshEsta no es la documentación de un controlador específico de un 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 0las operaciones que requieren más de 100 megabytes de memoria escriben automáticamente los datos en archivos temporales de forma predeterminada.allowDiskUse()tiene la siguiente forma:db.collection.find(<match>).sort(<sort>).allowDiskUse()
Consulta Uso de ordenamiento e índices 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 la compatibilidad de Atlas con 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 está false:
.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 afecta a las operaciones de ordenación que utilizan un índice o a las operaciones de ordenación sin índice («en memoria») que requieren menos de 100 megabytes de memoria. Para obtener documentación más completa sobre la ordenación en memoria y el uso de índices de ordenación, consulte Ordenación y uso de í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
Considerar una colección sensors con solo el índice por defecto sobre _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. La operación 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.