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);