“文档” 菜单
文档首页
/
MongoDB Manual
/ /

聚合管道限制

在此页面上

  • 结果大小限制
  • 阶段数量限制
  • 内存限制

使用 aggregate命令进行的聚合操作具有以下限制。

aggregate 命令既可以返回一个游标,也可以将结果存储在集合中。结果集中的每个文档存在 16 MB 的 BSON 文档大小限制。如果任何单个文档超过 BSON 文档大小限制,则聚合会产生错误。该限制仅适用于返回的文档。在管道处理过程中,文档可能会超过此大小。db.collection.aggregate() 方法默认返回一个游标。

在 5.0 版中进行了更改:MongoDB 5.0 将单个管道中允许的聚合管道阶段限制为 1000 个。

从 MongoDB 6.0 开始,allowDiskUseByDefault 参数可控制需要 100 MB 以上内存容量来执行的管道阶段是否默认会将临时文件写入磁盘。

  • 如果将 allowDiskUseByDefault 设为 true,则默认情况下,需要 100 MB 以上内存容量的管道阶段会将临时文件写入磁盘。您可以使用 { allowDiskUse: false } 选项来为特定的 findaggregate 命令禁用将临时文件写入磁盘的功能。

  • 如果 allowDiskUseByDefault 设置为 false,则默认情况下,需要超过 100 MB 的内存才能执行的管道阶段会引发错误。您可以使用 { allowDiskUse: true } 选项来为特定 findaggregate 启用向磁盘写入临时文件的功能。

$search聚合阶段不限于100 MB RAM,因为它在单独的进程中运行。

allowDiskUsetrue 时,可将临时文件写入磁盘的阶段示例如下:

注意

管道阶段对文档流进行操作,每个管道阶段接收文档,对其进行处理,然后输出结果文档。

某些阶段在处理完所有传入文档之前无法输出任何文档。这些管道阶段必须将其阶段输出保留在 RAM 中,直到处理完所有传入文档。因此,这些管道阶段所需的空间可能超过 100 MB 的限制。

如果某一 $sort 管道阶段的结果超过此限制,则可考虑添加一个 $limit 阶段

如果任何聚合阶段由于 内存限制 而将数据写入临时文件,则 分析器日志消息 和 诊断日志消息 会包含 指示符。usedDisk

← 聚合管道优化