mongodb - mongos aggregation 执行出错

浏览:54日期:2023-07-15

问题描述

我想用mongo的聚合算个uv,但下面的命令,如图:mongodb - mongos aggregation 执行出错报错,aggregation result exceeds maximum document size (16MB)

文档中提到这个问题如图, http://docs.mongodb.org/manual/core/aggregation-pipeline-limits/,mongodb - mongos aggregation 执行出错

请各位帮忙看看感谢

问题解答

回答1:

数据太多,处理不了。你可以先用 $project 选取下字段然后再group,

{$project:{ xxx : 1, yyy : 1, }}...回答2:

语法都是正确的,我在自己的机器上试了以下数据:

> db.uv.find(){ '_id' : ObjectId('52a102490e085e51aa153478'), 'ip' : '127.0.0.1' }{ '_id' : ObjectId('52a1024b0e085e51aa153479'), 'ip' : '127.0.0.2' }{ '_id' : ObjectId('52a1024c0e085e51aa15347a'), 'ip' : '127.0.0.2' }{ '_id' : ObjectId('52a1024e0e085e51aa15347b'), 'ip' : '127.0.0.3' }

除了match, 我用以下的aggregation查询:

db.uv.aggregate({ $group: { _id: '$ip', uv: { $first: 1 } }}, { $group: { _id: 'result', uv: { $sum: '$uv' } }})

结果是正确的

{ 'result' : [ { '_id' : 'result', 'uv' : 3 } ], 'ok' : 1 }

因为最终结果只有一个数,不应该有这样的报错。为了debug,建议在pipeline中输出每一步的结果看看。在要输出的步骤后面加上 { $limit: 3 } ,不要之后的步骤,运行输出。如果数据太多,结果太慢,在最开始加个limit,先在小数据跑跑看。

改来改去再到shell里运行如果不方便,就写到文件里,在terminal里

$ mongo < agg_uv.js

输入重定向不能省,不然就运行脚本模式了,跟交互模式有些区别。

相关文章: