我想用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
輸入重定向不能省,不然就運行腳本模式了,跟交互模式有些差別。