MongoDB學習總結(三) —— 常用聚合函數


  上一篇介紹了MongoDB增刪改查命令的基本用法,這一篇來學習一下MongoDB的一些基本聚合函數。

  下面我們直奔主題,用簡單的實例依次介紹一下。

> count() 函數

  集合的count函數是最簡單的聚合函數,返回集合中文檔的數量。

 

>  distinct() 函數

  用於找出一個集合中,給定鍵的所有不同的值。

   

  我們還可通過在數據庫上運行命令,來執行distinct聚合函數,此時我們必須指定集合和鍵:

 

  命令參數中,鍵"distinct"指定統計的集合名稱,鍵"key"指定統計的鍵的名稱!返回一個文檔,鍵“value”指定統計的鍵在該集合中的所有值!我們還可以看出,在統計時還使用了索引。

 

> group() 函數

  group聚合可以實現稍微復雜一些的操作,其執行過程為:先按照指定的鍵對集合中的文檔進行分組,然后通過聚合每一組中的所有文檔,來產生最終的結果文檔。

 

 下面對student集合中的age進行group,然后對每一組文檔進行處理,找出對應的name。

 

  Key: 指定要進行分組所使用的鍵名。

  Initial: 設置初始化值,針對分組后的每一組。

  $reduce:函數,第一個參數是當前的文檔對象,第二個參數是文檔循環的累加。根據所需的條件對每個分組進行聚合操作,每一組會有一個獨立的累加器文檔,記錄聚合結果。

 

  我們還可通過在數據庫上運行命令

 

  "ns":  指定集合名。

 

  以上是對集合所有記錄進行分組操作,當然還可以根據某些條件來進行分組。下面我們對namejack,lucy,james的進行分組。

 

  這里我們看到通過condition條件過濾,只對名字是jack,lucy,james的文檔進行分組,condition這里可以使用縮寫cond或者q。

  另外我們看到還有一個參數finalize,這個參數目的是對$reduce聚合后的結果再次進行處理,最終得到所需的結果。

 

> MapReduce 函數

  MapReduce是聚合里最復雜的,也是最靈活的,count,distince,group能做到的,它都能做到。

  map:映射函數,將操作映射到集合中的每一個文檔,集合會按照你指定的key進行映射分組。使用函數emit(key,value)

  reduce:化簡函數,會對map分組后的數據進行分組簡化,直到每個鍵的列表只有一個值為止,返回結果集。 

  mapReduce: 最后執行函數,參數為map,reduce。

 

  概念不好理解,看下實例就很明白了。

 

  從這個實例可以看出,map使用 使用函數emit(key,value),根據name鍵進行映射分組,每個鍵對應數組{count:1}的鍵值。

  然后reduce函數根據每個鍵所對應的鍵值進行相應操作。最終得到所需的結果集。

  最后mapReduce函數輸出這個結果集。

 

  下面我們看看這個結果集的值。

 

 

 

  常用的聚合函數使用就介紹到這里,下一篇學習一下索引的一些基本用法。     

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM