想完成类似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();