Mongodb 按照时间进行分组统计查询

MongoDB函数介绍:

  • •$project - 可以重构数据
  • •$match - 可以实现类似query的功能

  • •$limit - 限制返回个数

  • •$skip - 同上

  • •$unwind - 可以将一个包含数组的文档切分成多个, 比如你的文档有数组字段 A, A中有10个元素, 那么 经过 $unwind处理后会产生10个文档,这些文档只有 字段 A不同

  • •$group - 统计操作, 还提供了一系列子命令

  • –$avg, $sum …

  • •$sort - 排序

业务需求,根据时间进行分组排序并查询出相应字段。

//分组条件,按照天进行分组 
DBObject all = new BasicDBObject("_id",new BasicDBObject("month",new 
                    BasicDBObject("$month", "$loginTime"))
                   .append("day", new BasicDBObject("$dayOfMonth", "$loginTime"))
                   .append("year", new BasicDBObject("$year", "$loginTime")))
                   .append("count",new BasicDBObject("$sum", 1));
 // group
 DBObject group = new BasicDBObject("$group", all);

 DBObject condition1 = new BasicDBObject();
 condition1.put("loginTime",new         
              BasicDBObject("$gte",tody).append("$lte", tomorrow));//注意这边时间是要data类型
  
DBObject match = new BasicDBObject("$match", condition1); // $match相当于where
    
 // 排序
  DBObject sortFields = new BasicDBObject("loginTime", -1);
 // 注意此处排序是按照字段day升序,但是不能写day 需用_id代替,因为day是group用的字段
  DBObject sort = new BasicDBObject("$sort", sortFields);
//List需要按照顺序添加
        List optionList = new ArrayList<>();
        optionList.add(match);
        optionList.add(group);
        optionList.add(sort);
    AggregationOutput output =                             
                     mongoTemplate.getCollection("logMemberLogin").aggregate(optionList);
 
 for (DBObject obj : output.results()) {
       输出XXX
}

以上就是Mongodb按照时间天分组的教程了。

你可能感兴趣的:(java,Mongodb,分组查询)