加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读