當前位置:成語大全網 - 書法字典 - MongoDB聚合

MongoDB聚合

匯總數據,然後返回計算的數據。聚合操作將依賴關系中多個文檔的值組合在壹起,並且可以對分組數據執行各種操作以返回單個結果。

MongoDB提供了三種執行聚合操作的方法:聚合管道、map-reduce函數和單用途聚合方法。

MongoDB聚合操作在邏輯上是在數據處理管道上建模的。文檔可以進入多級管道來處理文檔,然後返回聚合值。

底層管道提供過濾器(類似於查詢操作)和文檔轉換(修改文檔的輸出形式)操作。

其他管道操作為文檔指定特定屬性或多個屬性進行分組和排序,就像數組內容的聚合工具壹樣。管道的階段可以使用操作符來執行任務。

管道使用MongoDB自己的本地操作進行聚合操作效率更高,管道是MongoDB中最先進行聚合操作的。

聚合管道可以操作碎片收集。聚合管道可以通過使用索引來提高性能。優化階段將在聚合管道內進行。

可以通過使用db.collection.aggregate()的explain參數來查看執行計劃。

聚合管道以確定需要返回哪些字段。如果只使用需要的字段,可以減少數據量。

AddFields+match放在AddFields之前(如果是project/$addFields的結果,不能移動)以減少數據量。

Match:首先執行$match減少數據量,然後執行排序操作。

Match:如果在前面加壹個$match操作,可以使用索引來減少數據操作。

跳過(從3.2開始可用):可以在操作project之前減少數據量。

通常,在重新排序優化之前,階段合並不會發生。

極限:如果數據量不能減少,兩個階段不會合並。否則,先排序,然後獲取指定的數量並放入內存。如果中間有$skip操作,放在最後。

當數據量超過內存限制時,該操作需要設置allowDiskUse=true。

從MongoDB3.6開始,aggregate選項被刪除,結果作為壹段數據返回。

Aggregate可以返回遊標或數據結果集。在返回的結果中,每個文檔的大小不能超過16M(此限制僅適用於返回的文檔)。

文檔可能會超過這個限制,db.collection.aggregate()默認返回cursor。

從MongoDB2.6開始,流水線階段的RAM限制為100M m..如果超過限制,就會發生錯誤。如果要處理大量數據集,請使用allowDiskUse選項在管道階段啟動聚合操作,並將數據寫入臨時文件。

從MongoDB3.4開始,graphLookup操作將忽略該選項。如果其他階段有aggregate()操作,allowDiskUse=true將影響這些階段。

從MongoDB3.2開始,如果按照切片匹配值,只會在這個切片中計算。

聚合操作在多個切片上執行。如果未指定主切片,這些操作將被路由到其他切片,以減少主切片的負載。

查找階段需要在主圖塊上執行查詢。

將聚合管道分成兩部分,以便對切片執行優化。

操作可以參考例子。

MapReduce可以對切片執行操作,切片集可以用作輸入或輸出。

使用瓦片集作為MapReduce的輸入源,mongos並行地將作業分派給每個瓦片。Mongos會等待所有的作業完成。

如果MapReduce的out字段有壹個碎片值,MongoDB使用_id字段作為碎片的基礎。

作為片段集輸出:

在操作過程中,mapreduce有許多鎖:

相關實踐教程