Definição
cursor.allowDiskUse()Importante
Método mongosh
This page documents a
mongoshmethod. This is not the documentation for a language-specific driver, such as Node.js.Para drivers de API do MongoDB, consulte a documentação do driver do MongoDB específica da linguagem.
Use
allowDiskUse()to either allow or prohibit writing temporary files on disk when a pipeline stage exceeds the 100 megabyte limit. Starting in MongoDB 6.0, operations that require greater than 100 megabytes of memory automatically write data to temporary files by default.allowDiskUse()tem o seguinte formato:db.collection.find(<match>).sort(<sort>).allowDiskUse()
Consulte Uso de classificação e indexação para obter mais informações sobre operações de classificação na memória.
Compatibilidade
Esse método está disponível em implantações hospedadas nos seguintes ambientes:
- MongoDB Atlas: The fully managed service for MongoDB deployments in the cloud
Observação
This command is supported in all MongoDB Atlas clusters. For information on Atlas support for all commands, see Unsupported Commands.
MongoDB Enterprise: a versão autogerenciada e baseada em assinatura do MongoDB
MongoDB Community: uma versão com código disponível, de uso gratuito e autogerenciada do MongoDB
Comportamento
Interação com allowDiskUseByDefault
A partir do MongoDB 6.0, os estágios do pipeline que exigem mais de 100 megabytes de memória para execução gravam arquivos temporários no disco por padrão.
Observação
Antes do MongoDB 6.0, .allowDiskUse(false) e .allowDiskUse(true) têm o mesmo efeito. No MongoDB 6.0, tanto o mongosh quanto o shell mongo legado se comportam da seguinte maneira:
Se allowDiskUseByDefault for true (este é o padrão):
.allowDiskUse()não tem efeito adicional.allowDiskUse(true)não tem efeito adicional.allowDiskUse(false)proíbe a query de gravar arquivos temporários no disco
Se allowDiskUseByDefault for false:
.allowDiskUse()permite gravar arquivos temporários no disco.allowDiskUse(true)permite gravar arquivos temporários no disco.allowDiskUse(false)não tem efeito adicional
Suporta somente classificações grandes não indexadas
cursor.allowDiskUse() has no effect on sort operations answered using an index or non-indexed ("in-memory") sort operations which require less than 100 megabytes of memory. For more complete documentation on in-memory sorts and sort index use, see Sort and Index Use.
Para verificar se o MongoDB deve executar uma ordenação na memória, acrescente cursor.explain() à query e verifique os resultados explicativos. Se o plano de query contiver um estágio SORT, o MongoDB deverá executar uma operação de classificação na memória sujeita ao limite de memória de 100 megabytes.
Exemplo
Considere uma coleção sensors com apenas o índice padrão em _id. A coleção contém documentos semelhantes aos seguintes:
{ "sensor-name" : "TEMP-21425", "sensor-location" : "Unit 12", "reading" : { "timestamp" : Timestamp(1580247215, 1), "value" : 212, "unit" : "Fahrenheit" } }
The following operation includes a cursor.sort() on the field reading.timestamp. The operation also passes false to cursor.allowDiskUse() to prohibit the query from writing temporary files to disk.
db.sensors.find({"sensor-location" : "Unit 12"}). sort({"reading.timestamp" : 1}). allowDiskUse(false)
Como o reading.timestamp não está incluído em um índice, o MongoDB deve executar uma operação de classificação na memória para retornar os resultados na ordem de classificação solicitada. Ao especificar cursor.allowDiskUse(false), o MongoDB não pode processar a operação de classificação se ela exigir mais de 100 megabytes de memória do sistema. Se a operação exigir mais de 100 megabytes de memória do sistema, o MongoDB retornará um erro.