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