【Mongodb教程 第十一課 】MongoDB 彙總

來源:互聯網
上載者:User

標籤:des   http   io   os   ar   使用   sp   檔案   資料   

彙總操作過程中的資料記錄和計算結果返回。彙總操作分組值從多個文檔,並可以執行各種操作,分組資料返回單個結果。在SQL COUNT(*)和group by 相當於MongoDB的聚集。

aggregate() 方法

對於在MongoDB中聚集,應該使用aggregate()方法。 

文法:

aggregate() 方法的基本文法如下

>db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
例子:

在集合中,有以下的資料:

{   _id: ObjectId(7df78ad8902c)   title: ‘MongoDB Overview‘,    description: ‘MongoDB is no sql database‘,   by_user: ‘yiibai point‘,   url: ‘http://www.yiibai.com‘,   tags: [‘mongodb‘, ‘database‘, ‘NoSQL‘],   likes: 100},{   _id: ObjectId(7df78ad8902d)   title: ‘NoSQL Overview‘,    description: ‘No sql database is very fast‘,   by_user: ‘yiibai point‘,   url: ‘http://www.yiibai.com‘,   tags: [‘mongodb‘, ‘database‘, ‘NoSQL‘],   likes: 10},{   _id: ObjectId(7df78ad8902e)   title: ‘Neo4j Overview‘,    description: ‘Neo4j is no sql database‘,   by_user: ‘Neo4j‘,   url: ‘http://www.neo4j.com‘,   tags: [‘neo4j‘, ‘database‘, ‘NoSQL‘],   likes: 750},

現在從上面的集合,如果想顯示一個列表,有很多使用者寫的教程,那麼使用 aggregate() 方法,如下所示:

> db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}]){   "result" : [      {         "_id" : "yiibai point",         "num_tutorial" : 2      },      {         "_id" : "yiibai point",         "num_tutorial" : 1      }   ],   "ok" : 1}>

上述使用的情況相當於SQL查詢 select by_user, count(*) from mycol group by by_user

在上面的例子中,我們已分組欄位 by_user 文檔,並在每個的次數by_user先前的值總和遞增。沒有聚集運算式列表。 

運算式 描述 執行個體
$sum 總結從集合中的所有檔案所定義的值. db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}])
$avg 從所有文檔集合中所有給定值計算的平均. db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}])
$min 擷取集合中的所有檔案中的相應值最小. db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}])
$max 擷取集合中的所有檔案中的相應值的最大. db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}])
$push 值插入到一個數組產生文檔中. db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}])
$addToSet 值插入到一個數組中所得到的文檔,但不會建立重複. db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}])
$first 根據分組從來源文件中擷取的第一個文檔。通常情況下,這才有意義,連同以前的一些應用 “$sort”-stage. db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}])
$last 根據分組從來源文件中擷取最後的文檔。通常,這才有意義,連同以前的一些應用 “$sort”-stage. db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}])
管道概念

在UNIX 命令 shell 管道是指一些輸入和輸出作為輸入下一個命令等執行操作的可能性。 MongoDB 彙總架構也支援同樣的概念。有一組可能的階段,每個這些的一組文檔作為輸入,併產生一個結果集的檔案(或最終產生的JSON文檔在管道末端)。然後又再次被用來為下一階段等。 

可能的階段彙總架構如下:

  • $project: 用於選擇從收集的一些具體欄位。
  • $match: 這是一個濾波操作,因此可以減少量,作為下一階段的輸入給定的文檔。
  • $group: 如上所討論的,這不實際的彙總。
  • $sort: 檔案排序。
  • $skip: 與此有可能向前跳過的檔案清單中的一個給定的的文檔數量。
  • $limit: 這限制了的文檔數量看一下由從當前位置開始的給定數
  • $unwind: 這是用來平倉文檔的中使用數組。使用數組時,資料是一種pre-joinded,再次有個別檔案,此操作將被取消。因此,這個階段,數量會增加檔案的下一階段。

【Mongodb教程 第十一課 】MongoDB 彙總

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.