我想用mongo的聚合算个uv,但下面的命令,如图:
报错,aggregation result exceeds maximum document size (16MB)
文档中提到这个问题如图, http://docs.mongodb.org/manual/core/aggregation-pipeline-limits/,
请各位帮忙看看
感谢
我想用mongo的聚合算个uv,但下面的命令,如图:
报错,aggregation result exceeds maximum document size (16MB)
文档中提到这个问题如图, http://docs.mongodb.org/manual/core/aggregation-pipeline-limits/,
请各位帮忙看看
感谢
语法都是正确的,我在自己的机器上试了以下数据:
> 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
输入重定向不能省,不然就运行脚本模式了,跟交互模式有些区别。
1 回答1.3k 阅读✓ 已解决
2 回答1.5k 阅读
1 回答1.4k 阅读
1 回答717 阅读
数据太多,处理不了。你可以先用 $project 选取下字段然后再group,