allowDiskUse()(允许排序写盘)
最后更新:2026-10-09
allowDiskUse()(允许排序写盘)
allowDiskUse()允许游标在执行sort()等需要大量内存的阻塞型操作时使用磁盘,语法为`db.users.find().sort({ age: -1 }).allowDiskUse()`。默认排序超过100MB内存限制会报错,启用后中间结果可写入临时文件。它常用于超大结果集的排序和聚合场景,代价是磁盘IO带来的性能下降。
| 分类 | 游标 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
db.<集合>.find(<条件>).sort(<排序键>).allowDiskUse()
返回值:启用写盘后的游标(可继续链式调用)。
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// allowDiskUse:大集合排序时允许写盘
const result = db.logs.find({ level: 'error' })
.sort({ timestamp: -1 })
.allowDiskUse()
.toArray()
result.length
运行结果:
1200
📌 注意事项
- 默认单次排序内存上限100MB,超出报错
- 启用后中间结果写入临时文件,速度变慢
- 聚合管道的allowDiskUse选项是等价物
🏷️ 相关标签
💡 相关案例
更多实战案例即将上线,敬请期待。
📚 相关教程
❓ 常见问题
Q什么时候需要allowDiskUse?
A排序或聚合的中间结果超过100MB内存限制报错时启用,例如对超大集合做全量排序。
QallowDiskUse影响性能吗?
A会,中间结果写盘比纯内存慢很多,能用索引排序就优先用索引避免写盘。
QallowDiskUse和聚合的allowDiskUse一样吗?
A语义相同,都是允许中间结果写盘;游标方法作用于find().sort(),聚合选项作用于aggregate()。