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:用于云中 MongoDB 部署的完全托管服务
注意
所有 MongoDB Atlas 集群都支持此命令。有关 Atlas 对所有命令的支持的信息,请参阅不支持的命令。
MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本
MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本
行为
互动 allowDiskUseByDefault
从 MongoDB 6.0 开始,需要 100 MB 以上内存容量的管道阶段默认将临时文件写入磁盘。
注意
在 MongoDB 6.0 之前,.allowDiskUse(false)
和 .allowDiskUse(true)
具有相同的效果。在 MongoDB 6.0 中,mongosh
和旧版 mongo
Shell 在以下方面表现一致:
如果 allowDiskUseByDefault
为 true
(这是默认值):
.allowDiskUse()
没有额外作用.allowDiskUse(true)
没有额外作用.allowDiskUse(false)
禁止查询将临时文件写入磁盘
如果 allowDiskUseByDefault
为 false
:
.allowDiskUse()
支持将临时文件写入磁盘.allowDiskUse(true)
支持将临时文件写入磁盘.allowDiskUse(false)
没有额外作用
仅支持大型非索引排序
cursor.allowDiskUse()
对使用索引应答的排序操作或需要少于100 MB 内存的非索引(“内存中”)排序操作没有影响。有关内存中排序和排序索引使用的更完整文档,请参阅排序和索引使用。
要检查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.timestamp
上的 cursor.sort()
。该操作还会将 false
传递给 cursor.allowDiskUse()
,以禁止查询将临时文件写入磁盘。
db.sensors.find({"sensor-location" : "Unit 12"}). sort({"reading.timestamp" : 1}). allowDiskUse(false)
由于 reading.timestamp
未包含在索引中,因此MongoDB必须执行内存中排序操作,才能按请求的排序顺序返回结果。通过指定 cursor.allowDiskUse(false)
,如果需要超过 100 MB 的系统内存, MongoDB将无法进程排序操作。如果该操作需要超过 100 MB 的系统内存, MongoDB将返回错误。