mongodb聚合查询-JPA

想完成类似sql的group操作,根据日志统计每天一个操作类型的用户总数总数
,同一用户在一天的多个操作算作一次。

方法一,使用Query方式,先写mongodb语句

db.getCollection('log').aggregate(
   [
      {$match:{username:"1581234567"}},
      {
        $group : {
           _id:"$username",
           count: { $sum: 1 }
        }
      },
      {$match:{ timestamp: { $gt: 1530720000, $lte: 1530806399 } }}
   ]
)

本来是想对JPA用Query方式,但是对应的字段跟实体类不一致。

第二个方法,单独对需要的字段重新整理一个实体类,这样可能在JPA中就可以写Distinct关键字
findDistinctMessageByTimestampBetweenAndMessage(有待考证)

第三个方法,直接获取查询条件的集合,再去除需要的字段,放到新的集合中统计大小

定义方法
 public List<Log> findByTimestampBetweenAndMessage(Double createbegin, Double createend, String message);

--Controller中实现
List<Log> activeLog = logService.findByTimestampBetweenAndMessage(logbegintime, logendtime, "/tokens/login/updateclientid");

List activeTemp = new ArrayList();
for(int j=0;jString username=activeLog.get(j).getUsername();
     if(!activeTemp.contains(username)){
         activeTemp.add(username);
     }
 }

 --最终需要的数据
 long activecount=activeTemp.size();

你可能感兴趣的:(笔记)