cursor.allowDiskUse()
定义
cursor.allowDiskUse()
重要
mongosh 方法
这是一个
mongosh
方法。 这不是Node.js
或其他特定于编程语言的驱动程序方法的文档。在大多数情况下,
mongosh
方法的工作方式与传统mongo
shell方法相同。 但是,某些旧方法在mongosh
中不可用。有关旧版
mongo
shell 文档,请参阅相应 MongoDB Server 版本的文档:有关 MongoDB API 驱动程序,请参阅特定语言的 MongoDB 驱动程序文档。
allowDiskUse()
允许MongoDB在处理阻塞排序操作时使用磁盘上的临时文件来存储超过100 MB 系统内存限制的数据。 如果MongoDB需要使用超过100 MB 的系统内存来执行阻塞排序操作,则MongoDB将返回错误,除非查询指定cursor.allowDiskUse()
。allowDiskUse()
采用以下形式:db.collection.find(<match>).sort(<sort>).allowDiskUse()
请参阅排序和索引使用,详细了解阻塞排序操作。
兼容性
此方法可用于以下环境中托管的部署:
MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务
注意
所有 MongoDB Atlas 集群都支持此命令。有关 Atlas 对所有命令的支持的信息,请参阅不支持的命令。
MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本
MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本
行为
仅支持大型非索引排序
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.timestamp
的 cursor.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 将返回错误。