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;j<activeLog.size();j++){
     String username=activeLog.get(j).getUsername();
     if(!activeTemp.contains(username)){
         activeTemp.add(username);
     }
 }

 --最终需要的数据
 long activecount=activeTemp.size();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值