尝试从MongoDB获取总数和百分比(使用MapReduce)
我有一些文档存储对特定页面的访问,基本上看起来是这样的事实上有更多的数据点,但这应该能让人明白这一点:尝试从MongoDB获取总数和百分比(使用MapReduce),mongodb,mapreduce,mongodb-query,Mongodb,Mapreduce,Mongodb Query,我有一些文档存储对特定页面的访问,基本上看起来是这样的事实上有更多的数据点,但这应该能让人明白这一点: [ { page: "home", timeStamp: 1417457320 }, { page: "service", timeStamp: 1417457323 }, { page: "service", timeStamp: 1417457325 } ] 我试图报告两件事:每个页面每天的总页面浏览量,以及每个页面占每天总页面
[
{
page: "home",
timeStamp: 1417457320
},
{
page: "service",
timeStamp: 1417457323
},
{
page: "service",
timeStamp: 1417457325
}
]
我试图报告两件事:每个页面每天的总页面浏览量,以及每个页面占每天总页面浏览量的百分比。我要找的东西是:
{
date: 1417392000000,
page: "home",
visits: 123,
percentageOfTotalVisits: .3
}
这篇文章让我很快得到了总数,但我一直在努力得到总数的百分比
谢谢 由于您的结果是基于每天的,因此您需要按日期对记录进行分组。然后进行计算。map reduce函数可以编写如下:
地图功能:
将年、月和日期的组合作为键发出。
作为页面名称的值。
日期、年份和日期信息在发出之前从时间戳中提取
var map = function(){
var date = new Date(this.timeStamp);
var year = date.getYear();
var day = date.getDate();
var month = date.getMonth();
var key = day+""+month+""+year;
emit(key,{"page":this.page});
}
reduce函数:
跟踪特定密钥的唯一页面数。
收集每页的计数后,将计算百分比。
每个键返回结果
var reduce = function(id,obj){
var result = {};
var totalCount = 0;
for(var i=0;i<obj.length;i++)
{
if(result[obj[i].page]){
result[obj[i].page].visits++;
}
else{
result[obj[i].page] = {"visits":1,"percentageOfTotalVisits":0};
}
totalCount++;
}
var keys = Object.keys(result);
for(var j=0;j<keys.length;j++)
{
result[keys[j]].percentageOfTotalVisits =
result[keys[j]].visits/totalCount;
}
return result;
}
示例o/p:在db.out.find.pretty上
db.collection.mapReduce(map,reduce,{out: "out"})
{
"_id" : "17070",
"value" : {
"home" : {
"visits" : 1,
"percentageOfTotalVisits" : 0.3333333333333333
},
"service" : {
"visits" : 2,
"percentageOfTotalVisits" : 0.6666666666666666
}
}
}