MongoDB之彙總

來源:互聯網
上載者:User

標籤:mongodb   彙總資料   文檔   sql   

MongoDB除了基本的查詢功能,還提供了很多強大的彙總工具。

count

和SQL中類似,用來統計集合中的文檔數量總和:

不管集合有多大,count都能夠快速的返迴文檔數量。
可以添加篩選條件,但需要犧牲查詢效能:

db.lf.count({"name":"rrrr"})
distinct

用來找出給定鍵的所有不同值,使用時必須指定集合和鍵:

group

group會促使MongoDB將集合依據選定索引值的不同分成若干組,然後通過彙總每一組內的文檔,產生一個結果文檔。講的有點模糊?看下面的例子:

db.runCommand({  "group":  {    "ns":"lf",    "key":{"name":true},    "initial":{"count":0},    "$reduce":function(doc,prev)    {      prev.count++;    },    "condition":{"age":{"$gt":20}}  }})

通過ns指定要分組的集合:

   "ns":"lf",

通過key完成文檔分組的依據:

"key":{"name":true},

這裡說明所有name鍵的值相同的文檔會被劃分到一組,true代表會返回鍵name的值。
initial代表初始化,可以用來設定累加器變數

 "initial":{"count":0},

$reduce表示函數調用

  "$reduce":function(doc,prev){...}

condition用來存放篩選條件:

"condition":{"age":{"$gt":20}}

最後執行結果為:

finalize

下面介紹一下完成器finalize,完成器用於精簡從資料庫傳到使用者的資料,也就是說,可以針對查詢結果進一步過濾:

db.runCommand(  {    "group":    {      "ns":"lf",      "key":{"name":true},      "initial":{"count":0},      "$reduce":function(doc,prev)      {        prev.count++;      },      "finalize":function(doc)      {        doc.num=doc.count;        delete doc.count;      }    }  })

finalize能夠修改傳遞的參數,也能夠返回新值,結果如下:

$keyf

有些時候分組所依據的條件很複雜,不僅是一個鍵.比如要使用group計算每個類別有多篇部落格文章.由於有很多作者,給文章分類時可能不規律的使用了大小寫。
所以,如果要是按類別名來分組,最後”MongoDB”和”mongodb”就是不同的組.為了消除這種大小寫影響,就要定義一個函數來確定文檔所依據的鍵。定義分組要用到$keyf:

db.runCommand( {  "group":   {    "ns":"lf",    "$keyf":function(doc){return {"name":doc.username.toLowerCase()}},    "initial":{"count":0},    "$reduce":function(doc,prev)       {        prev.count++;       }   } })

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

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.