Docs 菜单

cursor.allowDiskUse()

cursor.allowDiskUse()

重要

mongosh 方法

本页面提供 mongosh 方法的相关信息。这不是 特定于语言的驱动程序(例如 Node.js)的文档。

如需了解 MongoDB API 驱动程序,请参阅特定语言的 MongoDB 驱动程序文档。

当管道阶段超过 100 MB 限制时,使用 allowDiskUse() 以允许或禁止在磁盘上写入临时文件。从 MongoDB 6.0 开始,需要大于 100 MB 内存的操作默认会自动将数据写入临时文件。

allowDiskUse() 具有以下形式:

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

请参阅排序和索引使用,详细了解阻塞排序操作。

此方法可用于以下环境中托管的部署:

注意

所有 MongoDB Atlas 集群都支持此命令。有关 Atlas 对所有命令的支持的信息,请参阅不支持的命令

从 MongoDB 6.0 开始,需要 100 MB 以上内存容量的管道阶段默认将临时文件写入磁盘。

注意

在 MongoDB 6.0 之前,.allowDiskUse(false).allowDiskUse(true) 具有相同的效果。在 MongoDB 6.0 中,mongosh 和旧版 mongo Shell 在以下方面表现一致:

如果 allowDiskUseByDefaulttrue(这是默认值):

  • .allowDiskUse() 没有其他作用

  • .allowDiskUse(true) 没有其他作用

  • .allowDiskUse(false) 禁止查询将临时文件写入磁盘

如果 allowDiskUseByDefaultfalse

  • .allowDiskUse() 支持将临时文件写入磁盘

  • .allowDiskUse(true) 支持将临时文件写入磁盘

  • .allowDiskUse(false) 没有其他作用

cursor.allowDiskUse() 对使用索引回答的排序操作所需内存不到 100 兆字节的非索引(“阻塞”)排序操作没有影响。有关阻塞排序和使用排序索引的更完整文档,请参阅排序和索引的使用。

要检查 MongoDB 是否必须执行阻塞排序,请在查询中添加 cursor.explain() 并检查解释结果。如果查询计划包含 SORT 阶段,则 MongoDB 必须执行受 100 MB 内存限制的阻塞排序操作。

考虑一个集合 sensors,仅其默认索引位于 _id。该集合包含类似于以下内容的文档:

{
"sensor-name" : "TEMP-21425",
"sensor-location" : "Unit 12",
"reading" : {
"timestamp" : Timestamp(1580247215, 1),
"value" : 212,
"unit" : "Fahrenheit"
}
}

下面的操作包括对字段 reading.timestampcursor.sort()。该操作还包括 cursor.allowDiskUse() 以支持排序操作。

db.sensors.find({"sensor-location" : "Unit 12"}).
sort({"reading.timestamp" : 1}).
allowDiskUse()

由于索引中不包含 reading.timestamp,因此 MongoDB 必须执行阻塞排序操作才能按请求的排序顺序返回结果。通过指定 allowDiskUse()即使需要超过 100 MB 的系统内存,MongoDB 也可以处理排序操作。如果省略 allowDiskUse()并且该操作需要超过 100 MB 的系统内存,则 MongoDB 将返回错误。