当前位置: 首页 > >

基于MongoDB MapReduce的统计分析

发布时间:

前面已经简单介绍了MongoDB在OECP社区的一个应用:动态消息的设计实现。在上次的应用中,我们只介绍了MongoDB最基本的查询的功能,今天我再介绍一下MongoDB更加高级的应用:用MongoDB做统计分析。
query.put("date",?newBasicDBObject("$gte",?fromDate)); ?? *.getCollection().mapReduce(mapfun,?reducefun,"pageview_results",?query);//最好定义query,以降低统计的原始结果集???
遍历pageview_results集合的结果:[{_id:{url:”/blog/yongtree/258”,title:’博客1’},value:’2010-10-11 20:30:56’},{_id:{url:”/blog/slx/288”,title:’博客2’}, value:’2010-10-01 02:23:33’}] ?

????query.put("entityName",?entityName); ?? ????query.put("date",?newBasicDBObject("$gte",?fromDate)); ??

  • ????query.put("date",?newBasicDBObject("$lt",?toDate)); ?? List?sessionIds?=?this.mongoService.getCollection().distinct("sessionId",?query);//这里运用了取出结果集中的重复值的函数distinct(String?key,DBObject?query),相当于SQL:select?distinct(name)?from?table???
    定义map方法,主要是定义outputCollection的结构。OutputCollection的输出结构为:{_id:key,value:次数浏览的次数}

    java?代码

    1. String?mapfun?=?"?function(){emit({url:this.url,title:this.title},1)}";//key={url:this.url,title:this.title},value=reduce方法的返回值。以为是计算数据的次数,所以这里的value定义的是常量1???

    定义reduce方法

    java?代码

    1. String?reducefun?=?"?function(key,vals){var?count=0;?for(var?i?in?vals){count+=vals[i];}?return?count;}";//如果同一个key的数据出现的次数进行求和。???

    执行

    java?代码

    1. *.getCollection().mapReduce(mapfun,?reducefun,"pageview_results",?new?BasicDBObject("sessionId",new?BasicDBObject("$in",sessionIds.toArray()))); ??

    遍历pageview_results集合的结果:[{_id:{url:”/blog/yongtree/258”,title:’博客1’},value:’45.0’},{_id:{url:”/blog/slx/288”,title:’博客2’}, value:’30.0’}] ?

    前台展现的效果:


    当进入用户空间时,展现空间主人关心的其他内容



    当浏览某篇内容时,展现其他浏览者的关心的内容


    ?

    继续关注
    OECP社区,我们将会实践和发布更多基于MongoDB的应用。本着共享的精神,该文档可以被转载和应用,但是要注明出处。

    作者主页:
    http://www.po-soft.com/hi/yongtree




    相关资源:JAVA*偈道绰胍约翱聪钅吭创



  • 友情链接: