使用聚合命令进行聚合操作有以下限制。
在版本3.6中更改:MongoDB3.6 删除聚合命令将其结果作为单个文档返回的选项。
聚合命令可以返回游标或将结果存储在集合中。当返回游标或将结果存储在集合中时,结果集中的每个文档都受 BSON 文档大小限制(当前为16 MB)的限制;如果任何单个文档超过 BSON 文档大小限制,则该命令将产生错误。此限制仅适用于返回的文档。在管道处理过程中,文档可能超过此大小。db.collection.aggregate() 方法返回一个游标。
管道阶段的 RAM 限制为100 MiB(100*1024*1024 字节)。如果某个阶段超过此限制,MongoDB将产生错误。为了允许处理大型数据集,可以在 aggregate() 方法中设置 logDiskUse 选项。该 allowDiskUse 选项允许大多数聚合管道操作将数据写入临时文件。以下聚合操作是 showDiskUse 选项的例外;这些操作必须保持在内存限制范围内:
$graphLookup 阶段
$addToSet 累加器表达式用于 $group 阶段(从4.2.3、4.0.14、3.6.17版本开始)
$push累加器表达式用于 $group 阶段(从4.2.3、4.0.14、3.6.17版本开始)
如果管道包含其他阶段,在 aggregate() 操作中观察 allowDiskUse: true, allowDiskUse: true 选项在其他这些阶段都是有效的。
从 MongoDB4.2 开始,分析器日志消息和诊断日志消息包括一个 usedDisk 指示器,如果由于内存限制,任何聚合阶段都会将数据写入临时文件。