日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
MongoDBMapReduce
在用 MongoDB 查詢時,若返回的數(shù)據(jù)量很大,或者做一些比較復(fù)雜的統(tǒng)計和聚合操作做花費的時間很長時,可以使用 MongoDB 中的 mapReduce 進行實現(xiàn)。mapReduce 是個靈活且強大的數(shù)據(jù)聚合工具,它的好處是可以把一個聚合任務(wù)分解為多個小的任務(wù),分配到多個服務(wù)器上并行處理。

創(chuàng)新互聯(lián)建站2013年至今,公司以做網(wǎng)站、網(wǎng)站設(shè)計、系統(tǒng)開發(fā)、網(wǎng)絡(luò)推廣、文化傳媒、企業(yè)宣傳、平面廣告設(shè)計等為主要業(yè)務(wù),適用行業(yè)近百種。服務(wù)企業(yè)客戶1000多家,涉及國內(nèi)多個省份客戶。擁有多年網(wǎng)站建設(shè)開發(fā)經(jīng)驗。為企業(yè)提供專業(yè)的網(wǎng)站建設(shè)、創(chuàng)意設(shè)計、宣傳推廣等服務(wù)。 通過專業(yè)的設(shè)計、獨特的風(fēng)格,為不同客戶提供各種風(fēng)格的特色服務(wù)。

在 MongoDB 中我們可以使用 mapReduce 命令來執(zhí)行 mapReduce 操作。

mapReduce 命令

在 mapReduce 命令中要實現(xiàn)兩個函數(shù),分別是 map 函數(shù)和 reduce 函數(shù),其中 map 函數(shù)調(diào)用 emit(key, value),遍歷集合中的所有記錄,并將 key 與 value 傳遞給 reduce 函數(shù)進行處理,如下所示:

> db.collection_name.mapReduce(
    function() {emit(key, value);},                  // map 函數(shù)
    function(key, values) {return reduceFunction},   // reduce 函數(shù)
    {
        out: collection,
        query: document,
        sort: document,
        limit: number
    }
)

參數(shù)說明如下:

  • map 函數(shù):一個 javascript 函數(shù),它用一個鍵映射一個值并發(fā)出一個鍵值對;
  • reduce 函數(shù):一個 javascript 函數(shù),用于減少或分組具有相同鍵的所有文檔;
  • out:指定 map-reduce 查詢結(jié)果的位置;
  • query:指定用于選擇文檔的可選選擇條件;
  • sort:指定可選的排序條件;
  • limit:指定要返回的最大文檔數(shù)(可選)。

使用 mapReduce

假如有一個存儲用戶帖子信息的集合,其中存儲了若干用戶的用戶名、狀態(tài)等信息,例如下面這樣:

{
    "post_text": "編程幫(biancheng.net),一個在線學(xué)習(xí)編程的網(wǎng)站,專注于分享優(yōu)質(zhì)編程教程。",
    "user_name": "bianchengbang",
    "status":"active"
}

接下來在上述的集合中使用 mapReduce 命令來選擇集合中所有
"status":"active" 的文檔,然后根據(jù)用戶名對它們進行分組,最后統(tǒng)計每個用戶的發(fā)帖數(shù)量。示例代碼如下:

> db.posts.mapReduce(
... function() { emit(this.user_name,1); },
... function(key, values) {return Array.sum(values)},
... {
...    query:{status:"active"},
...    out:"post_total"
... }
... )

上面 mapReduce 命令的輸出結(jié)果如下所示:

{
        "result" : "post_total",
        "timeMillis" : 48,
        "counts" : {
                "input" : 11,
                "emit" : 11,
                "reduce" : 2,
                "output" : 2
        },
        "ok" : 1
}

關(guān)于運行結(jié)果,有如下幾點需要說明:

  • result:儲存結(jié)果的 collection 的名字,這是個臨時集合,mapReduce 的連接關(guān)閉后會被自動刪除;
  • timeMillis:執(zhí)行花費的時間,單位為毫秒;
  • input:滿足條件被發(fā)送到 map 函數(shù)的文檔個數(shù);
  • emit:在 map 函數(shù)中 emit 被調(diào)用的次數(shù),也就是所有集合中的數(shù)據(jù)總量;
  • ouput:結(jié)果集合中的文檔個數(shù)(count 對調(diào)試非常有幫助);
  • ok:查詢是否執(zhí)行成功,成功為 1;
  • err:若執(zhí)行失敗,則會在這里顯示失敗原因。

通過運行結(jié)果可以發(fā)現(xiàn),共有 11 個文檔與查詢匹配(狀態(tài)為“active”),map 函數(shù)生成了 11 個具有鍵值對的文檔,最后 reduce 函數(shù)將具有相同鍵值的映射文檔分為 2 個組。

若要查看 mapReduce 查詢的結(jié)果,可以使用 find 方法,如下所示:

> db.posts.mapReduce(
... function() { emit(this.user_name,1); },
... function(key, values) {return Array.sum(values)},
... {
...    query:{status:"active"},
...    out:"post_total"
... }
... ).find()

上面的查詢語句,執(zhí)行結(jié)果如下:

{ "_id" : "biancheng", "value" : 5 }
{ "_id" : "bianchengbang", "value" : 6 }

以類似的方式,mapReduce 查詢可用于構(gòu)造大型復(fù)雜的聚合查詢,自定義 JavaScript 函數(shù)的使用使得 mapReduce 非常靈活和強大。


文章名稱:MongoDBMapReduce
路徑分享:http://www.dlmjj.cn/article/dphjojp.html