mongodb - mongos aggregation 执行出错
PHP中文网
PHP中文网 2017-04-22 08:59:32
0
2
819

我想用mongo的聚合算个uv,但下面的命令,如图:

报错,aggregation result exceeds maximum document size (16MB)

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

请各位帮忙看看
感谢

PHP中文网
PHP中文网

认证高级PHP讲师

全部回覆(2)
Peter_Zhu

資料太多,處理不了。你可以先用 $project 選取下欄位然後再group,

{$project:{
    xxx : 1,
    yyy : 1,
  }
}...
PHPzhong

文法都是正確的,我在自己的機器上試了以下數據:

> 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

輸入重定向不能省,不然就運行腳本模式了,跟交互模式有些差別。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!