进入MongoDB中文手册(4.2版本)目录
使用aggregate命令进行的聚合操作具有以下限制。
1 结果大小限制
在3.6版中进行了更改: MongoDB 3.6删除了aggregate 命令中返回结果是单个文档的选项。
aggregate命令可以返回游标或将结果存储在集合中。当返回游标或将结果存储在集合中时,结果集中的每个文档都存在BSON文档大小的限制,目前为16兆字节;如果任何单个文档超出了 限制,该命令将产生错误。该限制仅适用于返回的文件;在管道处理过程中,文档可能会超出此大小。db.collection.aggregate()方法返回一个游标。
2 内存限制
管道阶段的内存(RAM)限制为100 MiB(100 * 1024 * 1024字节)。如果一个阶段超出此限制,则MongoDB将产生错误。要允许处理大型数据集,可以在方法中设置 aggregate()方法的选项allowDiskUse。该allowDiskUse选项允许大部分的聚合管道操作将数据写入到一个临时文件。以下聚合操作是allowDiskUse选项的例外:这些操作必须采取内存限制:
- $graphLookup 阶段
- 在$group阶段中使用的$addToSet累加器表达式 (从4.2.3、4.0.14、3.6.17版开始)
- $group阶段中使用的$push累加器表达式 (从4.2.3、4.0.14、3.6.17版开始)
如果在aggregate()操作的管道中包括使用allowDiskUse:true的其他阶段(以上例外阶段之外的阶段),则allowDiskUse:true选项对阶段有效。
从MongoDB 4.2开始,分析日志消息(profiler log messages)和诊断日志消息(diagnostic log messages)包括一个usedDisk ,用来表示是否有任何聚合阶段由于内存限制而将数据写入临时文件。
也可以看看