mongodb的聚合查询aggregate group count操作

首先来看 Mysql统计数据

SELECT
	a.entity_id,
	COUNT( DISTINCT a.train_user_node_id ) 
FROM
	t_train_user_node_study_detail a 
WHERE
	a.entity_id IN ( 1, 26 ) 
GROUP BY
	a.entity_id

mongodb的聚合查询aggregate group count操作_第1张图片

用MongoDB的aggregate查询

db.train_user_node_study_detail.aggregate([
 {
  $match :{
   "entityId": {"$in":["1","26"]}
  }
 },
 {
  $group :{
   _id:{"entityId" : "$entityId", "trainUserNodeId" :"$trainUserNodeId"}
  }
 }
 ,
 {
  $group :{
   _id:{"entityId" : "$_id.entityId"},
   count :{"$sum":1}
  }
 }
])

mongodb的聚合查询aggregate group count操作_第2张图片
java代码

 @Test
    public void aggregation1() {
        List<String> ids = new ArrayList<>();
        ids.add("1");
        ids.add("26");
        Criteria criteria = new Criteria();
        criteria.and("entityId").in(ids);
        String[] group1 = { "entityId", "trainUserNodeId" };
        Aggregation aggregation = Aggregation.newAggregation(Aggregation.match(criteria), Aggregation.group(group1),
                Aggregation.group("entityId").count().as("studNum"));
        AggregationResults<TrainUserNodeGroup> result = mongoTemplate.aggregate(aggregation, "train_user_node_study_detail",
                TrainUserNodeGroup.class);
        log.info("result is {}", result.getMappedResults());
    }
    @Setter
    @Getter
    public class Group2 extends BaseBean {

        private static final long serialVersionUID = 3924605590502137660L;

        private String id;

        private int sum;
    }

控制台打印的结果
在这里插入图片描述

你可能感兴趣的:(springboot,分布式,互联网技术,mongodb,java,spring,boot)