代码改变世界

MongoDb 聚合报错

2015-09-30 10:23  只喝牛奶的杀手  阅读(6515)  评论(2编辑  收藏  举报

 聚合框架它是数据聚合的一个新框架,其概念类似于数据处理的管道。 每个文档通过一个由多个节点组成的管道,每个节点有自己特殊的功能(分组、过滤等),文档经过管道处理后,最后输出相应的结果。

管道基本的功能有两个:

一是对文档进行“过滤”,也就是筛选出符合条件的文档;

二是对文档进行“变换”,也就是改变文档的输出形式。

errmsg:Exceeded memory limit for $group,but didn't allow external Sort.Pass allowDiskuse:true

错误详细信息:

 

我这次用的表的数据量是:大约有四百万数据

我要查的是:用户接受信息最多的前五个用户

写完分析语句,严格按照语法写的;

既然出现问题,我们来一下Debug(咱们码农有力量

如果管道没有给出预期结果,就需要进行调试,调试时,可以先只指定第一个管道操作符,如果这样得到了预期结果,那就再指定第二个管道操作符,以上面的例子说,先试着$project 操作符进行聚合,如果这个操作符结果是有效的,就在添加 $group 操作符,

如果结果还是有效的,就再添加 $sort,最后再添加 $limit 操作符,这样就可以逐步定位到造成问题的操作符了。

逐步调试发现没问题 不是语法的错误

麻蛋,原因是聚合的结果必须要限制在16M以内操作,(mongodb支持的最大影响信息的大小),否则必须放在磁盘中做缓存(allowDiskUse=True)。

最后把要统计的数据给搞出来了,喜大普奔。。。。