MongoDB 聚合函數管道之group中各個參數的意思

  • 聚合(aggregate)主要用於計算數據,類似sql中的sum()、avg()
  • 語法

    db.集合名稱.aggregate([ {管道 : {表達式}} ])

    管道

    • 管道在Unix和Linux中一般用於將當前命令的輸出結果作爲下一個命令的輸入

      ps aux | grep mongod
      
    • 在mongodb中,管道具有同樣的作用,文檔處理完畢後,通過管道進行下一次處理

    • 常用管道
      • $group:將集合中的文檔分組,可用於統計結果
      • $match:過濾數據,只輸出符合條件的文檔
      • $project:修改輸入文檔的結構,如重命名、增加、刪除字段、創建計算結果
      • $sort:將輸入文檔排序後輸出
      • $limit:限制聚合管道返回的文檔數
      • $skip:跳過指定數量的文檔,並返回餘下的文檔
      • $unwind:將數組類型的字段進行拆分

    表達式

    • 處理輸入文檔並輸出
    • 語法

      表達式:'$列名'
      
    • 常用表達式

      • $sum:計算總和,$sum:1同count表示計數
      • $avg:計算平均值
      • $min:獲取最小值
      • $max:獲取最大值
      • $push:在結果文檔中插入值到一個數組中
      • $first:根據資源文檔的排序獲取第一個文檔數據
      • $last:根據資源文檔的排序獲取最後一個文檔數據
    今天就單獨講講group搭配$sum的使用及各個參數的作用:

先用一個集合:

{ "_id" : 1, "name" : "郭靖", "hometown" : "蒙古", "age" : 20, "gender" : true }
{ "_id" : 2, "name" : "黃蓉", "hometown" : "桃花島", "age" : 18, "gender" : false }
{ "_id" : 3, "name" : "華箏", "hometown" : "蒙古", "age" : 18, "gender" : false }
{ "_id" : 4, "name" : "黃藥師", "hometown" : "桃花島", "age" : 40, "gender" : true }
{ "_id" : 5, "name" : "段譽", "hometown" : "大理", "age" : 16, "gender" : true }

{ "_id" : 6, "name" : "段王爺", "hometown" : "大理", "age" : 45, "gender" : true }

先看一條語句:

db.stu.aggregate([{$group:{_id:'$age',sum:{$sum:1}}}])


結果出來了,那麼有沒有仔細想過各個參數是什麼意思呢?

_id表示分組的依據,使用某個字段的格式爲'$字段'

sum,這個參數沒有實際意義,是自己定義的

$sum,就是固定的表達式,後面的參數1,代表什麼?

先看一下參數是0的運行結果:


再看一下,結果是2的運行結果:


這樣就看出來了,後面的參數就是輸出結果按照怎麼樣的算法輸出


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章