首先来看 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查询
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}
}
}
])
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;
}
控制台打印的结果