cursor.allowDiskUse() (original) (raw)

cursor.allowDiskUse()

Important

mongosh Method

This page documents a mongosh method. This is _not_the documentation for a language-specific driver, such as Node.js.

For MongoDB API drivers, refer to the language-specificMongoDB driver documentation.

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() has the following form:


db.collection.find(<match>).sort(<sort>).allowDiskUse()

See Sort and Index Use for more information on in-memory sort operations.

This method is available in deployments hosted in the following environments:

Note

This command is supported in all MongoDB Atlas clusters. For information on Atlas support for all commands, seeUnsupported Commands.

Starting in MongoDB 6.0, pipeline stages that require more than 100 megabytes of memory to execute write temporary files to disk by default.

Note

Prior to MongoDB 6.0, .allowDiskUse(false) and.allowDiskUse(true) have the same effect. In MongoDB 6.0, bothmongosh and the legacy mongo shell behave the following way:

If allowDiskUseByDefault is true (this is the default):

If allowDiskUseByDefault is false:

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, seeSort and Index Use.

To check if MongoDB must perform an in-memory sort, appendcursor.explain() to the query and check theexplain results. If the query plan contains a SORT stage, then MongoDB must perform an in-memory sort operation subject to the 100 megabyte memory limit.

Consider a collection sensors with only the default index on_id. The collection contains documents similar to the following:


{

  "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 tocursor.allowDiskUse() to prohibit the query from writing temporary files to disk.


db.sensors.find({"sensor-location" : "Unit 12"}).

  sort({"reading.timestamp" : 1}).

  allowDiskUse(false)

Since reading.timestamp is not included in an index, MongoDB must perform an in-memory sort operation to return results in the requested sort order. By specifying cursor.allowDiskUse(false), MongoDB cannot process the sort operation if it requires more than 100 megabytes of system memory. If the operation requires more than 100 megabytes of system memory, MongoDB would return an error.