1. <i id="s6b2k"><small id="s6b2k"></small></i>
    <b id="s6b2k"><bdo id="s6b2k"></bdo></b>
  2. <wbr id="s6b2k"></wbr>

    MongoDB聚合group的操作指南_MongoDB

    來源:腳本之家  責任編輯:小易  

    MongoDB 聚合

    MongoDB中聚合(aggregate)主要用于處理數據(諸如統計平均值,求和等),并返回計算后的數據結果。有點類似sql語句中的 count(*)。

    基本語法為:db.collection.aggregate( [ <stage1>, <stage2>, ... ] )

    現在在mycol集合中有以下數據:

    { "_id" : 1, "name" : "tom", "sex" : "男", "score" : 100, "age" : 34 }
    { "_id" : 2, "name" : "jeke", "sex" : "男", "score" : 90, "age" : 24 }
    { "_id" : 3, "name" : "kite", "sex" : "女", "score" : 40, "age" : 36 }
    { "_id" : 4, "name" : "herry", "sex" : "男", "score" : 90, "age" : 56 }
    { "_id" : 5, "name" : "marry", "sex" : "女", "score" : 70, "age" : 18 }
    { "_id" : 6, "name" : "john", "sex" : "男", "score" : 100, "age" : 31 }

    1、$sum計算總和。

      Sql: select sex,count(*) frommycol group by sex

      MongoDb: db.mycol.aggregate([{$group: {_id: '$sex', personCount: {$sum: 1}}}])

      Sql: select sex,sum(score) totalScore frommycol group by sex

      MongoDb: db.mycol.aggregate([{$group: {_id: '$sex', totalScore: {$sum: '$score'}}}])

    2、$avg 計算平均值

      Sql: select sex,avg(score) avgScore frommycol group by sex

      Mongodb: db.mycol.aggregate([{$group: {_id: '$sex', avgScore: {$avg: '$score'}}}])

    3、$max獲取集合中所有文檔對應值得最大值。

      Sql: select sex,max(score) maxScore frommycol group by sex

      Mongodb: db.mycol.aggregate([{$group: {_id: '$sex', maxScore: {$max: '$score'}}}])

    4、$min 獲取集合中所有文檔對應值得最小值。

      Sql: select sex,min(score) minScore frommycol group by sex

      Mongodb: db.mycol.aggregate([{$group: {_id: '$sex', minScore: {$min: '$score'}}}])

    5、$push 把文檔中某一列對應的所有數據插入值到一個數組中。

      Mongodb: db.mycol.aggregate([{$group: {_id: '$sex', scores : {$push: '$score'}}}])

    6、$addToSet把文檔中某一列對應的所有數據插入值到一個數組中,去掉重復的

      db.mycol.aggregate([{$group: {_id: '$sex', scores : {$addToSet: '$score'}}}])

    7、 $first根據資源文檔的排序獲取第一個文檔數據。

      db.mycol.aggregate([{$group: {_id: '$sex', firstPerson : {$first: '$name'}}}])

    8、 $last根據資源文檔的排序獲取最后一個文檔數據。

      db.mycol.aggregate([{$group: {_id: '$sex', lastPerson : {$last: '$name'}}}])

    9、全部統計null

      db.mycol.aggregate([{$group:{_id:null,totalScore:{$push:'$score'}}}])

    例子

      現在在t2集合中有以下數據:

      { "country" : "china", "province" : "sh", "userid" : "a" }
      { "country" : "china", "province" : "sh", "userid" : "b" }
      { "country" : "china", "province" : "sh", "userid" : "a" }
      { "country" : "china", "province" : "sh", "userid" : "c" }
      { "country" : "china", "province" : "bj", "userid" : "da" }
      { "country" : "china", "province" : "bj", "userid" : "fa" }

      需求是統計出每個country/province下的userid的數量(同一個userid只統計一次)

      過程如下。

      首先試著這樣來統計:

      db.t2.aggregate([{$group:{"_id":{"country":"$country","prov":"$province"},"number":{$sum:1}}}])

      結果是錯誤的:

      原因是,這樣來統計不能區分userid相同的情況 (上面的數據中sh有兩個 userid = a)

      為了解決這個問題,首先執行一個group,其id 是 country, province, userid三個field:

      db.t2.aggregate([ { $group: {"_id": { "country" : "$country", "province": "$province" , "uid" : "$userid" } } } ])

      可以看出,這步的目的是把相同的userid只剩下一個。

      然后第二步,再第一步的結果之上再執行統計:

      db.t2.aggregate([ 
      { $group: {"_id": { "country" : "$country", "province": "$province" , "uid" : "$userid" } } } , 
      { $group: {"_id": { "country" : "$_id.country", "province": "$_id.province" }, count : { $sum : 1 } } } 
      ])
    
    

      這回就對了

      加入一個$project操作符,把_id去掉

      db.t2.aggregate([ { $group: {"_id": { "country" : "$country", "province": "$province" , "uid" : "$userid" } } } , 
      { $group: {"_id": { "country" : "$_id.country", "province": "$_id.province" }, count: { $sum : 1 } } }, 
      { $project : {"_id": 0, "country" : "$_id.country", "province" : "$_id.province", "count" : 1}} 
      ])
    
    

      最終結果如下:

    管道的概念

    管道在Unix和Linux中一般用于將當前命令的輸出結果作為下一個命令的參數。

    MongoDB的聚合管道將MongoDB文檔在一個管道處理完畢后將結果傳遞給下一個管道處理。管道操作是可以重復的。

    表達式:處理輸入文檔并輸出。表達式是無狀態的,只能用于計算當前聚合管道的文檔,不能處理其它的文檔。

    這里我們介紹一下聚合框架中常用的幾個操作:

    $project:修改輸入文檔的結構。可以用來重命名、增加或刪除域,也可以用于創建計算結果以及嵌套文檔。 match:用于過濾數據,只輸出符合條件的文檔。match使用MongoDB的標準查詢操作。 $limit:用來限制MongoDB聚合管道返回的文檔數。 $skip:在聚合管道中跳過指定數量的文檔,并返回余下的文檔。 $unwind:將文檔中的某一個數組類型字段拆分成多條,每條包含數組中的一個值。 $group:將集合中的文檔分組,可用于統計結果。 $sort:將輸入文檔排序后輸出。 $geoNear:輸出接近某一地理位置的有序文檔。

    1、$project實例

      db.mycol.aggregate({$project:{name : 1, score : 1}})

      這樣的話結果中就只還有_id,name和score三個字段了,默認情況下_id字段是被包含的,如果要想不包含_id話可以這樣:

      db.mycol.aggregate({$project:{_id : 0, name : 1, score : 1}})

    2、$match實例

      $match用于獲取分數大于30小于并且小于100的記錄,然后將符合條件的記錄送到下一階段$group管道操作符進行處理

      db.mycol.aggregate([{$match :{score: {$gt: 30, $lt: 100}}},{$group:{_id:'$sex',count:{$sum:1}}}]) 

    總結

    到此這篇關于MongoDB聚合group的文章就介紹到這了,更多相關 MongoDB聚合group內容請搜索真格學網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持真格學網!

    您可能感興趣的文章:MongoDB教程之聚合(count、distinct和group)Mongodb聚合函數count、distinct、group如何實現數據聚合操作

  3. 本文相關:
  4. mongodb driver使用代碼詳解
  5. express+mongoose實現對mongodb增刪改查操作詳解
  6. windows下mongodb配置用戶權限實例
  7. mongodb系列教程(四):設置用戶訪問權限
  8. mongodb系列教程(七):mongodb數據結構詳解
  9. 深入了解mongodb是如何存儲數據的
  10. mongodb 主從復制實例講解
  11. mongodb 內存管理相關總結
  12. mongodb的寫操作
  13. centos7 yum安裝mongodb實現步驟詳解
  14. node.js實現mongodb中groupby操作?
  15. mongodb中如何實現類似于sql中的groupby?
  16. 如何實現將 MongoDB中group分組后的結果,再存入到...
  17. MongoDB中聚合的方法使用aggregate()返回的列表中...
  18. 如何實現將 MongoDB中group分組后的結果,再存入到...
  19. 如何實現mongodb中的sum匯總操作?
  20. 怎么用mongoTemplate寫mongodb的聚合查詢
  21. mongodb group聚合問題,如何才能只返回"count" , ...
  22. mongodb可以寫多個group嗎
  23. java操作mongodb group
  24. 網站首頁網頁制作腳本下載服務器操作系統網站運營平面設計媒體動畫電腦基礎硬件教程網絡安全mssqlmysqlmariadboracledb2mssql2008mssql2005sqlitepostgresqlmongodbredisaccess數據庫文摘數據庫其它首頁mongodb教程之聚合(count、distinct和group)mongodb聚合函數count、distinct、group如何實現數據聚合操作mongodb driver使用代碼詳解express+mongoose實現對mongodb增刪改查操作詳解windows下mongodb配置用戶權限實例mongodb系列教程(四):設置用戶訪問權限mongodb系列教程(七):mongodb數據結構詳解深入了解mongodb是如何存儲數據的mongodb 主從復制實例講解mongodb 內存管理相關總結mongodb的寫操作centos7 yum安裝mongodb實現步驟詳解mongodb常用操作命令大全mongodb各種查詢操作詳解mongodb數據庫插入、更新和刪除操mongodb 數據庫操作--備份 還原 mongodb插入數據的3種方法mongodb中使用distinct去重的簡單淺談mysql和mariadb區別(mariadbmongodb整庫備份與還原以及單個cmongodb查詢操作限制返回字段的方mongodb常見錯誤與解決方法小結(mongodb實現自動備份的全過程記錄mongodb 數據庫操作詳解--創建,切換,刪除mongodb數據庫中索引和explain的使用教程深入理解mongodb的復合索引淺析mongodb 全文檢索mongodb driver使用代碼詳解淺談mongodb中query查詢mongodb4.2.8備份恢復與導出導入(推薦)mongodb數據庫游標的使用淺析mongodb分片測試
    免責聲明 - 關于我們 - 聯系我們 - 廣告聯系 - 友情鏈接 - 幫助中心 - 頻道導航
    Copyright © 2017 www.yu113.com All Rights Reserved
    战天txt全集下载