新乡营销型网站建设,免费在线代理网页,开发公司施工管理事业部领导如何同下属协调沟通,美的集团网站建设昨天的时候我们先在网上找了测试类#xff0c;测试了一下mongdb的简单使用#xff0c;今天就来实地在项目中用一用
没安装mongodb的参考我上一篇文章#xff1a;ideaspringbootmongodb的简单测试使用分享
其实我们初学者最好是安装一个可视化的工具#xff0c;这样方便我…昨天的时候我们先在网上找了测试类测试了一下mongdb的简单使用今天就来实地在项目中用一用
没安装mongodb的参考我上一篇文章ideaspringbootmongodb的简单测试使用分享
其实我们初学者最好是安装一个可视化的工具这样方便我们管理数据 下载地址MongoDB Compass
我们选择Msi 安装版的然后安装。 安装完成以后就可以打开软件使用了。 默认连接我们的27017端口 说完这个现在来说一下我的业务需求
今日用户活跃度:登录了web产品的用户数统计 今日用户访问量:用户每打开一个网站页面就被记录1次。用户多次打开同一页面浏览量值累计。 思路 用户登陆了就要把用户id用户ip用户名字等存入t_user_login添加一条记录同时要在t_user_visits表插入一条记录 用户访问了就t_user_visits表插入一条记录
开始干 1.首先在拦截器中拦截然后获取我们需要的信息 2.将获取的信息存入MongoDB 3.然后统计人数 1先复制出一个拦截器取名为AccessLogInterceptor然后修改
public class AccessLogInterceptor implements HandlerInterceptor {Autowiredprivate MongoTemplate mongoTemplate;Autowiredprivate SysParamMapper sysParamMapper;Autowiredprivate UserMapper userMapper;private void responseForbiddenResult( HttpServletResponse httpResponse) {try {httpResponse.setContentType(application/json;charsetUTF-8);PrintWriter pw httpResponse.getWriter();pw.write(JSONObject.toJSONString(ResultUtil.getResult(ResultCode.FORBIDDEN)));pw.flush();} catch (IOException e) {e.printStackTrace();throw new RuntimeException(e);}}Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {return true;}/*** 请求处理之后进行调用但是在视图被渲染之前Controller方法调用之后* 我们主要修改这个方法 里的代码*/Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {//通过request获取用户正式ipString ip IPUtil.getIpAddress(request);HttpSession session request.getSession();//获取用户登陆的userIDString userID request.getSession().getAttribute(WebConstants.CURRENT_USER_ID).toString();int userId Integer.parseInt(userID);User user userMapper.get(userId);//判断当前URL是否为登陆的url如果是就给userLoginDoc插入一条数据if(/v1/user/login_sms.equals(request.getRequestURI())){UserLoginDoc userLoginDoc new UserLoginDoc();userLoginDoc.setUserName(user.getUsername());userLoginDoc.setCreateTime(new Date());userLoginDoc.setLastIp(ip);userLoginDoc.setUserId(user.getUserId());mongoTemplate.save(userLoginDoc,t_user_login);}//不管访问那个页面都要在这个UserAccessDoc插入一条数据UserAccessDoc userAccessDoc new UserAccessDoc();userAccessDoc.setUserId(user.getUserId());userAccessDoc.setAccessUrl(request.getRequestURI());userAccessDoc.setLastIp(ip);userAccessDoc.setUserName(user.getUsername());userAccessDoc.setCreateTime(new Date());mongoTemplate.save(userAccessDoc,t_user_visits);}/*** 在整个请求结束之后被调用也就是在DispatcherServlet 渲染了对应的视图之后执行主要是用于进行资源清理工作*/Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {}
}实体类
Getter
Setter
ToString
public class UserLoginDoc implements Serializable {private Integer userId;private String userName;private Date createTime;private String lastIp;}上面就已经存到我们的MongoDB中了现在就要去查询总数
//获取当天0点的时间
Date morning DateUtil.getTimesmorning();
//获取第二天0点的时间
Date times DateUtil.getTimesnight();
int loginCount mongoTemplate.aggregate(Aggregation.newAggregation(Aggregation.match(where(createTime).gte(morning).lte(times))),t_user_login, BasicDBObject.class).getMappedResults().size();