[MongoDB] 聚合操作概念

我們可以透過單一查詢(Query)來輕鬆回答「資料庫中有多少人口資料」,使用以下語法:

db.collection.count()

但是當我們的問題,無法由回傳的值直接回答,例如:人口資料中男與女的人數分別為多少,就需要執行更多次的單一查詢,才能回答問題,例:

db.collection.count({sex: "男"})
db.collection.count({sex: "女"})

如果我們想要執行一次單一查詢,就能直接回答上述問題,則就需要透過 MongoDB 的「聚合操作」。

聚合操作概念

聚合操作(Aggregation operation),是「直接在資料庫內」進行資料分組與統計。好處是不需要傳輸所有的原始資料,MongoDB 只傳輸統計結果,可以節省非常大的傳輸資源;也可以自動建立分區資料,減少了查詢的次數,只需要查詢一次,再統計資料並回傳結果。缺點是無法取得原始資料。

比較 mapReduce() 與 aggregate()

而 MongoDB 提供了兩種聚合操作的方式,第一種是「對映歸納 mapReduce()」;第二種是「聚合管線 aggregate()」,大致比較如下:

mapReduce()aggregate()
描述2 ~ 3 個資料處理階段,並使用自訂的 JS 函式操作資料,需要閱讀程式,才能知道每個資料處理階段所做的動作。資料用「管線(pipeline)」的概念傳遞,並使用 MongoDB 提供的指令操作資料,透過管線階段的符號,就能知道輸出的資料會被如何處理,例:配對 $match
靈活度在 map、reduce 與 finalize 能夠自訂複雜的 JS 邏輯函式。受限於官方提供的管線操作。
資料回傳的單一資料(Document),容量受限於 BSON Document Size 為 16 MB。回傳的單一資料(Document),容量受限於 BSON Document Size 為 16 MB。
限制較無特殊限制。在管線階段中,沒有開啟「allowDiskUse」選項,最大資料限制為 100MB。

您可在此處留言

avatar

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料

  Subscribe  
Notify of