84669 orang belajar
152542 orang belajar
20005 orang belajar
5487 orang belajar
7821 orang belajar
359900 orang belajar
3350 orang belajar
180660 orang belajar
48569 orang belajar
18603 orang belajar
40936 orang belajar
1549 orang belajar
1183 orang belajar
32909 orang belajar
我想用mongo的聚合算个uv,但下面的命令,如图:报错,aggregation result exceeds maximum document size (16MB)
文档中提到这个问题如图, http://docs.mongodb.org/manual/core/aggregation-pipeline-limits/,
请各位帮忙看看感谢
认证高级PHP讲师
数据太多,处理不了。你可以先用 $project 选取下字段然后再group,
{$project:{ xxx : 1, yyy : 1, } }...
语法都是正确的,我在自己的机器上试了以下数据:
> 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,先在小数据跑跑看。
{ $limit: 3 }
改来改去再到shell里运行如果不方便,就写到文件里,在terminal里
terminal
$ mongo < agg_uv.js
输入重定向不能省,不然就运行脚本模式了,跟交互模式有些区别。
数据太多,处理不了。你可以先用 $project 选取下字段然后再group,
语法都是正确的,我在自己的机器上试了以下数据:
除了match, 我用以下的aggregation查询:
结果是正确的
因为最终结果只有一个数,不应该有这样的报错。为了debug,建议在pipeline中输出每一步的结果看看。在要输出的步骤后面加上
{ $limit: 3 }
,不要之后的步骤,运行输出。如果数据太多,结果太慢,在最开始加个limit,先在小数据跑跑看。改来改去再到shell里运行如果不方便,就写到文件里,在
terminal
里$ mongo < agg_uv.js
输入重定向不能省,不然就运行脚本模式了,跟交互模式有些区别。