mongodb mongotemplate聚合
1.group by并且计算总数
@Test public void insertTest() { //测试数据 //insertTestData(); Aggregation agg = Aggregation.newAggregation( //Aggregation.match(Criteria.where("groupId").is(5)), Aggregation.group("groupId").count().as("total"), Aggregation.project("total").and("groupId").previousOperation(), Aggregation.sort(Sort.DEFAULT_DIRECTION, "total")); List<StaCount> list = mongoTemplate.aggregate(agg, "currentUser", StaCount.class).getMappedResults(); for(StaCount count : list) { System.out.println(count.getGroupId() + ":" + count.getTotal()); }
}
如果要带其他字段,将红字变为 Aggregation.group("groupId","groupName"...),并将project的and部分去掉即可;
2.Crieria的使用,注意andOperator和orOperator的用法
Aggregation agg = Aggregation.newAggregation(
Aggregation.match(new Criteria()
.andOperator(Criteria.where("onlineTime").gt(new Date()))
.orOperator( Criteria.where("offlineTime").gt(new Date())
,Criteria.where("offlineTime").exists(false) ))
3.Query的排序和分页
Query query = new Query(Criteria.where(ReportField.GROUP_ID).in(groupIdList)); query.with(new Sort(Direction.DESC, ReportField.ID)); query.skip(lastId).limit(limit);