聚合引言 聚集操作就是出來(lái)數(shù)據(jù)記錄并返回計(jì)算結(jié)果的操作。MongoDB提供了豐富的聚集操作,能夠檢測(cè)和執(zhí)行數(shù)據(jù)集上的計(jì)算。運(yùn)行在mongod上的數(shù)據(jù)聚集簡(jiǎn)化了代碼和資源限制。 像查詢一樣,在Mongo的聚合操作使用collections作為輸入,并返回一個(gè)或多個(gè)document
聚合引言
聚集操作就是出來(lái)數(shù)據(jù)記錄并返回計(jì)算結(jié)果的操作。MongoDB提供了豐富的聚集操作,能夠檢測(cè)和執(zhí)行數(shù)據(jù)集上的計(jì)算。運(yùn)行在mongod上的數(shù)據(jù)聚集簡(jiǎn)化了代碼和資源限制。
像查詢一樣,在Mongo的聚合操作使用collections作為輸入,并返回一個(gè)或多個(gè)document作為輸出。
聚合模式
聚合管道MongoDB2.2引入了一個(gè)新的聚合框架:聚合管道,這是基于數(shù)據(jù)處理管道概念的模型。文檔輸入一個(gè)多階段的管道并將文檔轉(zhuǎn)化為一個(gè)聚合的結(jié)果。
最基本的管道階段提供了過(guò)濾器(Filters)來(lái)像查詢一樣操作,和文檔轉(zhuǎn)化(Document transformations)來(lái)修改輸出文檔的形式。
其他的管道提供了對(duì)特定字段分組和排序的工具,也有聚合數(shù)組內(nèi)容的工具。并且,管道階段能對(duì)任務(wù)使用操作符,比如計(jì)算平均值或連接一個(gè)字符串。
管道使用MongoDB原生的操作提供了有效的數(shù)據(jù)聚合,也是MongoDB里面一個(gè)理想的數(shù)據(jù)聚合方法。
上面帶有注釋的聚合操作管道操作,這個(gè)聚合管道有兩個(gè)階段: $match和$group
Map-ReduceMongoDB也提供了map-reduce操作來(lái)執(zhí)行聚合操作。一般的,map-reduce操作有兩個(gè)階段:Map階段來(lái)處理每個(gè)文檔并為每個(gè)輸入文檔輸出一個(gè)或多個(gè)文檔,Reduce階段整合map操作的輸出。Map-reduce有一個(gè)可選的finalize階段,來(lái)為結(jié)果做最終的修改。和其他聚合操作一樣,map-reduce指出了查詢條件來(lái)選擇輸入文檔并排序和限制結(jié)果。
Map-reduce使用自定義的javasript函數(shù)來(lái)執(zhí)行map和reduce操作,以及可選的finalize操作。雖然自定義的javasript相對(duì)聚合管道提供了更大的靈活性,但一般map-reduce相對(duì)低效和復(fù)雜。
并且,map-reduce操作的輸出集合比集合管道的輸出極限大16M。
注:
從MongoDB2.4開(kāi)始,特定的mongo shell函數(shù)和屬性不能被map-reduce操作使用。MongoDB2.4也提供了同時(shí)執(zhí)行多個(gè)Javascript操作的支持。在MongoDB2.4之前,javascript代碼只能在單線程執(zhí)行,這為map-reduce的并行帶來(lái)困難。
單一目的的聚合操作
對(duì)很多的常規(guī)單一目的的聚合操作(single purpose aggregation operation),MongoDB提供了特殊目的的數(shù)據(jù)庫(kù)命令。這些常規(guī)的聚合操作是:返回匹配文檔的數(shù)量,返回一個(gè)字段的唯一的值,和基于一個(gè)字段值的分組。所有這些操作都是來(lái)自一個(gè)collection。雖然這些操作提供了簡(jiǎn)單的常規(guī)聚合操作處理方法,但他們都缺乏靈活性和像聚合管道、Map-reduce那樣的能力。
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com