mongodb 通过MapReduce统计用户Pv Uv
发布时间:2020-12-15 03:23:20 所属栏目:Java 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 @Componentpublic?class?UserDaoImpl?extends?MongoBaseDao?implements?UserDao?{????public?void?insertRecord(UserVisitRecord?record)?{????????ge
以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考 @Component public?class?UserDaoImpl?extends?MongoBaseDao?implements?UserDao?{ ????public?void?insertRecord(UserVisitRecord?record)?{ ????????getMongoTemplate().insert(record); ????} ????public?void?statisUserPvUv(String?date)?{ ????????String?map?=?"function()?{????????????????????????????????????????" ????????????????+?"???if(this.date=='"+date+"'){??????????????????????????" ????????????????+?"??????emit(this.date?,{uv:1,pv:1,userIds:this.userId})?" ????????????????+?"?????}" ????????????????+?"???}?"; ????????String?reduce?=?"function(key,?values)?{????????????" ????????????????+?"???var?temp?=?new?Array();???????????????" ????????????????+?"???var?userIds=?new?Array();?????????????" ????????????????+?"???for(i?=?0;?i?<?values.length;?i++)?{??" ????????????????+?"??????userIds=userIds.concat(values[i].userIds);" ????????????????+?"???}????????" ????????????????+?"???userIds.sort();?????????" ????????????????+?"???for(i?=?0;?i?<?userIds.length;?i++)?{" ????????????????+?"?????????if(?userIds[i]?==?userIds[i+1])?{?continue;}" ????????????????+?"?????????temp[temp.length]=userIds[i];" ????????????????+?"???}????????" ????????????????+?"???return?{uv:temp.length,pv:userIds.length,userIds:userIds};" ????????????????+?"?}"; ????????MapReduceOutput?mapReduceOutput?=?getMongoTemplate().getCollection("userVisitRecord").mapReduce(map,reduce,"tmp",null); ????????DBCollection?resultColl?=?mapReduceOutput.getOutputCollection(); ????????try?{ ????????????DBCursor?cursor?=?resultColl.find(); ????????????while?(cursor.hasNext())?{ ????????????????DBObject?dbObject?=?cursor.next(); ????????????????if?(dbObject.get("value")?!=?null)?{ ????????????????????UserStaticModel?userStaticModel=new?UserStaticModel(); ????????????????????userStaticModel.setUv(Math.round((double)((DBObject)?dbObject.get("value")).get("uv"))); ????????????????????userStaticModel.setPv(Math.round((double)?((DBObject)?dbObject.get("value")).get("pv"))); ????????????????????List<String>userIds=(List)?((DBObject)?dbObject.get("value")).get("userIds"); ????????????????????Set<String>?idSet=new?HashSet<>(userIds); ????????????????????userStaticModel.setUserIds(new?ArrayList(idSet)); ????????????????????userStaticModel.setDate(date); ????????????????????getMongoTemplate().insert(userStaticModel); ????????????????} ????????????} ????????}catch?(Exception?e){ ????????????e.printStackTrace(); ????????}finally?{ ????????????resultColl.drop(); ????????} ????} ????public?UserStaticModel?findStatic(String?date)?{ ????????Query?query=new?Query(); ????????query.addCriteria(Criteria.where("date").is(date)); ????????return?getMongoTemplate().findOne(query,UserStaticModel.class); ????} } ??String?map?=?"function()?{??????????????????????????????????????????????" ????????????????+?"???if(this.date=='"+date+"'){??????????????????????????" ????????????????+?"??????emit(this.date?,userIds:this.userId})?" ????????????????+?"?????}" ????????????????+?"???}?"; ??String?reduce?=?"function(key,userIds:userIds};" ????????????????+?"?}"; emit(this.date?,userIds:this.userId}) emit(this.date?,{userId:this.userId}) 以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- mybatis generator 配置 反向生成Entity简单增删
- 《Java 8 in Action》Chapter 4:引入流
- java-如何在Jackson的字符串中构造JsonNode时更改
- 笔记:第九讲JavaBean和RMI
- java – 如何用交替颜色生成Jlist
- 使用 Spring Boot 实现 WebSocket实时通信
- java日期格式为mmddhhmmss
- java – 乐观锁定和org.hibernate.StaleObjectSt
- org.springframework.beans.factory.BeanCreatio
- JavaFx Webview JDK 8无法加载自签名证书
热点阅读