mongoDB的map reduce

來源:互聯網
上載者:User

標籤:mongodb

mongoDB的map reduce使用

樣本:

res = db.runCommand({
    mapreduce:‘liveEpgUserVisits‘,
    map:function() {
        emit({provice:this.provice}, {"data":[{"mac":this.mac}],visit:this.visitNum, userCount:0});
    },
    reduce:function(key, value) {
        var ret = {data:[]}, visit=0
        var userCount=0;
        var macs = {};
        var sum = 0;
        for(var i in value) {
            var ia = value[i];
            for(var j in ia.data) {
                if(!macs[ia.data[j].mac]) {
                    macs[ia.data[j].mac] = true;
                    ret.data.push(ia.data[j]);

                    userCount += 1;

                }
            }

           sum += Number(ia.visit);
        }
        ret.visit = sum;
        ret.userCount = userCount;
        return ret;
    },
    query:{"inputTime":{$gte:ISODate("2014-09-17T14:20:00Z"),$lte:ISODate("2014-09-17T14:30:00Z")}},
    finalize:function(key, values){
        return [{count:values.data.length},{visit:values.visit},{userCount:values.userCount}];
    },
    out:‘tmp_mo_spcode_consignid_1‘,
    verbose:true
})上面的樣本,map:key是省份,value是這個省份對應的mac值、訪問數量、使用者數量。reduce:擷取到每個省份的value,然後進行運算,在將結果返回。通過finalize參數指定輸出格式。如果不指定輸出格式則會安裝map的key和value格式進行輸出。

其中db.runCommand包含以下參數:

db.runCommand( { mapreduce : <collection>,   map : <mapfunction>,   reduce : <reducefunction>   [, query : <query filter object>]   [, sort : <sort the query.  useful for optimization>]   [, limit : <number of objects to return from collection>]   [, out : <output-collection name>]   [, keeptemp: <true|false>]   [, finalize : <finalizefunction>]   [, scope : <object where fields go into javascript global scope >]   [, verbose : true] });

    - mapreduce:指定要進行mapreduce處理的collection
    - map:map函數    - reduce:reduce函數    - out:輸出結果的collection的名字,不指定會預設建立一個隨機名字的collection(如果使用了out選項,就不必指定keeptemp:true了,因為已經隱含在其中了)    - query:一個篩選條件,只有滿足條件的文檔才會調用map函數。(query。limit,sort可以隨意組合)    - sort:和limit結合的sort排序參數(也是在發往map函數前給文檔排序),可以最佳化分組機制    - limit:發往map函數的文檔數量的上限(要是沒有limit,單獨使用sort的用處不大)    - keytemp:true或false,表明結果輸出到的collection是否是臨時的,如果想在串連關閉後仍然保留這個集合,就要指定keeptemp為true,如果你用的是MongoDB的mongo用戶端串連,那必須exit後才會刪除。如果是指令碼執行,指令碼退出或調用close會自動刪除結果collection    - finalize:是函數,它會在執行完map、reduce後再對key和value進行一次計算並返回一個最終結果,這是處理過程的最後一步,所以finalize就是一個計算平均數,剪裁數組,清除多餘資訊的恰當時機    - scope:javascript代碼中要用到的變數,在這裡定義的變數在map,reduce,finalize函數中可見    - verbose:用於調試的詳細輸出選項,如果想看MpaReduce的運行過程,可以設定其為true。也可以print把map,reduce,finalize過程中的資訊輸出到伺服器日誌上。

mongoDB的map reduce

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.