来源url统计

db.runCommand({    
    mapReduce: 'access',
    map: function() { 
        emit({createDate:this.createDate,app:this.app,memberId:this.memberId,mallId:this.mallId},
        {cookie:this.cookie,ip:this.ip,source:this.source,refUrl:this.refUrl})    
     },
    reduce: function(key, values){
        reduced = {pv:0,uv:0,ip:0,rpv:0,urlMap:{}};
        var keystr = ''; 
        for(var k in key){
            keystr += key[k];
        }
        urlMap = {};
        if(!urlMap[keystr]){
            uvMap[keystr]={};
        }
        if(!ipMap[keystr]){
            ipMap[keystr]={};
        }
        
        values.forEach(function(val){
                
            if(val.cookie){
                 reduced.pv += 1;    
                 if(val.source=='refresher'){reduced.rpv += 1;}
                 uvkey = val.cookie+'_'+val.ip;
                 if(!uvMap[keystr][uvkey]){uvMap[keystr][uvkey]=1;reduced.uv += 1; }
                                 if(!ipMap[keystr][val.ip]){ipMap[keystr][val.ip]=1;reduced.ip += 1;}
                 if(val.refUrl){
                    if(urlMap[val.refUrl]){urlMap[val.refUrl] += 1;}
                                        else{urlMap[val.refUrl] = 1;}
                                 }
            }else{
               reduced.pv += val.pv;
               reduced.rpv += val.rpv;
               reduced.pv += val.pv;
               reduced.ip += val.ip;
               for(var k in val.urlMap){
                    if(urlMap[k]){urlMap[k] += val.urlMap[k];}
                                        else{urlMap[k] = val.urlMap[k];}    
               }
            }
                });
        reduced.urlMap = urlMap;
        return reduced;
        },
           query: {"createDate":"2017-05-15","mallId" : "42"},
           out: { merge : "post_man_new" },
           scope: {uvMap: {},ipMap: {}},
           finalize: function (key, val) {
                if (!val.cookie) {
                                reduced = {pv:0,uv:0,ip:0,rpv:0,maxUrl:''};
                                reduced.pv = val.pv;
                                reduced.rpv = val.rpv;
                                reduced.pv = val.pv;
                                reduced.ip = val.ip;
                                var keyset = Object.keys(val.urlMap);
                                var max =val.urlMap[keyset[0]];  
                                reduced.maxUrl =keyset[0];              
                                for (var i = 1; i < keyset.length; i++) {  
                                        if (val.urlMap[keyset[i]] > max) {  
                                                max = val.urlMap[keyset[i]];
                                                reduced.maxUrl = keyset[i];
                                        }  
                          
                                }   
                            
                                return reduced;
                    }
                reduced = {pv:1,ip:1,uv:1,rpv:1,maxUrl:""};
                return reduced;
    }
})

转载于:https://my.oschina.net/jj2050/blog/908356

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值