標籤:mongodb 資料庫
彙總引言
聚集操作就是出來資料記錄並返回計算結果的操作。MongoDB提供了豐富的聚集操作,能夠檢測和執行資料集上的計算。運行在mongod上的資料聚集簡化了代碼和資源限制。
像查詢一樣,在Mongo的彙總操作使用collections作為輸入,並返回一個或多個document作為輸出。
彙總模式
MongoDB2.2引入了一個新的彙總架構:彙總管道,這是基於資料處理管道概念的模型。文檔輸入一個多階段的管道並將文檔轉化為一個彙總的結果。
最基本的管道階段提供了過濾器(Filters)來像查詢一樣操作,和文檔轉化(Document transformations)來修改輸出文檔的形式。
其他的管道提供了對特定欄位分組和排序的工具,也有彙總數組內容的工具。並且,管道階段能對任務使用操作符,比如計算平均值或串連一個字串。
管道使用MongoDB原生的操作提供了有效資料彙總,也是MongoDB裡面一個理想的資料彙總方法。
上面帶有注釋的彙總操作管道操作,這個彙總管道有兩個階段: $match和$group
MongoDB也提供了map-reduce操作來執行彙總操作。一般的,map-reduce操作有兩個階段:Map階段來處理每個文檔並為每個輸入文檔輸出一個或多個文檔,Reduce階段整合map操作的輸出。Map-reduce有一個可選的finalize階段,來為結果做最終的修改。和其他彙總操作一樣,map-reduce指出了查詢條件來選擇輸入文檔並排序和限制結果。
Map-reduce使用自訂的javasript函數來執行map和reduce操作,以及可選的finalize操作。雖然自訂的javasript相對彙總管道提供了更大的靈活性,但一般map-reduce相對低效和複雜。
並且,map-reduce操作的輸出集合比集合管道的輸出極限大16M。
註:
從MongoDB2.4開始,特定的mongo shell函數和屬性不能被map-reduce操作使用。MongoDB2.4也提供了同時執行多個Javascript操作的支援。在MongoDB2.4之前,javascript代碼只能在單線程執行,這為map-reduce的並行帶來困難。
對很多的常規單一目的的彙總操作(single purpose aggregation operation),MongoDB提供了特殊目的的資料庫命令。這些常規的彙總操作是:返回匹配文檔的數量,返回一個欄位的唯一的值,和基於一個欄位值的分組。所有這些操作都是來自一個collection。雖然這些操作提供了簡單的常規彙總操作處理方法,但他們都缺乏靈活性和像彙總管道、Map-reduce那樣的能力。