MongoDB文件翻譯-聚集
聚集
聚集操作處理資料記錄,並返回計算結果。聚集操作從多個文件一起對資料分組,然後對分組的資料執行一系列操作,返回一個結果。MongoDB提供了3種方法來執行聚集:聚集管道、map-reduce函式和單一目的聚集方法。
聚集管道
MongoDB的聚集框架建模於資料處理管道的概念之上。文件進入一個多階段的管道,該管道把文件轉換成一個聚集結果。
最基本的管道階段提供了過濾器,類似查詢操作和文件變換,修改輸出文件的格式。
其它的管道操作提供了對文件按欄位進行分組和排序的工具,也提供了對陣列內容聚集的工具,包括文件陣列。此外,管道步驟可以對任務使用操作符,例如計算平均值,或者連線字串。
管道使用MongoDB原生的操作提供了有效的資料聚集功能,是MongoDB中優先選用的資料聚集方法。
聚集管道可以在分片集合上操作。
在某些步驟,聚集管道可以使用索引來提高效能。此外,聚集管道有一個內部優化階段。詳情請檢視管道操作符與索引和聚集管道優化。
Map-Reduce
MongoDB也提供了map-reduce操作來執行聚集。一般,map-reduce操作有兩個階段:map階段,處理每個文件,對每個輸入文件輸出1個或多個物件;和reduce階段,把map操作的輸出組合起來。可選地,map-reduce可以有一個最終階段:對結果做最後的修改。像其它聚集操作一樣,map-reduce可以指定一個查詢條件來選擇輸入文件,也可以排序,對結果做限制。
Map-reduce使用自定義的Javascript函式來處理map和reduce操作,可選的最終階段也是。與聚集管道相比,Javascript 提供了極大的靈活性,一般而言,map-reduce比聚集管道效率低一點,更復雜。
Map-reduce可以在分片集合上操作,也可以輸出到一個分片集合。詳情請檢視聚集管道與分片集合和Map-Reduce與分片集合。
單一目的聚集操作
MongoDB也提供了db.collection.count()
,db.collection.group()
,db.collection.distince()
等特殊目的的資料庫命令。
所有這些操作都是從單個集合來聚集文件。但是這些操作只是提供了對常用聚集過程的簡單方法,它們缺乏靈活性,功能也不如聚集管道和map-reduce。
其它特性和行為
關於聚集管道、map-reduce和特殊分組功能的特性比較,檢視聚集命令比較。