Aggregation:
参数说明:sql(Operators)
where ($match) 、group by ($group) 、having($match)、select($project)、order by($sort)、limit($limit)
sum($sum)、count($sum)、join($lookup)
/*
* project:列出所有本次查询的字段,包括查询条件的字段和需要搜索的字段;
* match:搜索条件criteria
* unwind:某一个字段是集合,将该字段分解成数组
* group:分组的字段,以及聚合相关查询
* sum:求和(同sql查询)
* count:数量(同sql查询)
* as:别名(同sql查询)
* addToSet:将符合的字段值添加到一个集合或数组中
* sort:排序
* skip&limit:分页查询
*/
public List<MongoUser> findMongo(PageableVo<RequestVo, User> user){
Criteria age = Criteria.where("age").is(user.getContent().get(0).getAge());
int offset = user.getPage() * user.getPageSize();
int limit = user.getPageSize();
TypedAggregation<MongoUser> mongoUserTypedAggregation = Aggregation.newAggregation(MongoUser.class,
Aggregation.project("id", "name", "age"),
Aggregation.skip(offset),
Aggregation.match(age),
Aggregation.limit(limit));
AggregationResults<MongoUser> aggregate = mongoTemplate.aggregate(mongoUserTypedAggregation, MongoUser.class);
List<MongoUser> mongoUsers = new ArrayList<>();
for (MongoUser mongoUser : aggregate) {
mongoUsers.add(mongoUser);
}
return mongoUsers;
}
}