聚合管道限制
使用aggregate
命令有以下限制。
结果大小限制
aggregate
命令可以返回游标或将结果存储在集合中。结果集中的每个文档都受16兆字节的BSON 文档大小限制。如果任何单个文档超过BSON 文档大小限制,聚合将产生错误。此限制仅适用于返回的文档。在管道处理过程中,文档可能超过此大小。默认情况下,db.collection.aggregate()
方法返回游标。
阶段数量限制
MongoDB 对单个管道中允许的聚合管道阶段数量限制为1000。
如果聚合管道在解析前后超过阶段限制,您将收到一个错误。
内存限制
从MongoDB 6.0开始,allowDiskUseByDefault
参数控制是否默认将需要超过100兆内存来执行的管道阶段写入磁盘上的临时文件。
如果将
allowDiskUseByDefault
设置为true
,则默认情况下,需要超过100兆内存来执行的管道阶段将写入磁盘上的临时文件。您可以使用{ allowDiskUse: false }
选项禁用特定find
或aggregate
命令写入磁盘的临时文件。如果将
allowDiskUseByDefault
设置为false
,则默认情况下,需要超过100兆内存来执行的管道阶段将引发错误。您可以使用{ allowDiskUse: true }
选项为特定find
或aggregate
启用写入磁盘的临时文件。
聚合$search
聚合阶段不受100兆RAM的限制,因为它在单独的进程中运行。
当allowDiskUse为true
时,可以写入磁盘的临时文件的阶段示例包括
注意
管道阶段在文档流上操作,每个管道阶段接收文档,处理它们,然后输出结果文档。
某些阶段在处理所有传入的文档之前不能输出任何文档。这些管道阶段必须将它们的阶段输出保留在RAM中,直到所有传入的文档都被处理。因此,这些管道阶段可能需要的空间超过100 MB限制。
如果您的某个$sort
管道阶段的结果超出了限制,请考虑添加一个$limit阶段。
性能分析日志消息和诊断日志消息中包含一个usedDisk
指示器,如果任何聚合阶段由于内存限制而将数据写入临时文件。