mongoDB 聚合操作
********************
相关类
Aggregation
public class Aggregation {
***********
构造方法
protected Aggregation(AggregationOperation... aggregationOperations) {
protected Aggregation(List<AggregationOperation> aggregationOperations) {
protected Aggregation(List<AggregationOperation> aggregationOperations, AggregationOptions options) {
***********
常用方法
public static Aggregation newAggregation(List<? extends AggregationOperation> operations) {
public static Aggregation newAggregation(AggregationOperation... operations) {
return new Aggregation(operations);
}
public Aggregation withOptions(AggregationOptions options) {
public static <T> TypedAggregation<T> newAggregation(Class<T> type, List<? extends AggregationOperation> operations) {
public static <T> TypedAggregation<T> newAggregation(Class<T> type, AggregationOperation... operations) {
public static ProjectionOperation project(String... fields) {
public static ProjectionOperation project(Fields fields) {
public static UnwindOperation unwind(String field) {
public static UnwindOperation unwind(String field, boolean preserveNullAndEmptyArrays) {
public static UnwindOperation unwind(String field, String arrayIndex) {
public static UnwindOperation unwind(String field, String arrayIndex, boolean preserveNullAndEmptyArrays) {
public static GroupOperation group(String... fields) {
public static GroupOperation group(Fields fields) {
public static SortOperation sort(Sort sort) {
public static SortOperation sort(Direction direction, String... fields) {
public static SortByCountOperation sortByCount(String field) {
public static SortByCountOperation sortByCount(AggregationExpression groupAndSortExpression) {
public static MatchOperation match(Criteria criteria) {
public static MatchOperation match(CriteriaDefinition criteria) {
public static OutOperation out(String outCollectionName) {
public static BucketOperation bucket(String groupByField) {
public static BucketOperation bucket(AggregationExpression groupByExpression) {
public static BucketAutoOperation bucketAuto(String groupByField, int buckets) {
public static BucketAutoOperation bucketAuto(AggregationExpression groupByExpression, int buckets) {
public static LookupOperation lookup(String from, String localField, String foreignField, String as) {
public static LookupOperation lookup(Field from, Field localField, Field foreignField, Field as) {
********************
示例
***************
controller 层
HelloController
@RestController
public class HelloController {
@Autowired
private MongoTemplate mongoTemplate;
@RequestMapping("/get")
public List<Map> get(){
Criteria criteria=Criteria.where("age").gte(18);
GroupOperation groupOperation=Aggregation.group("age")
.max("age").as("max")
.min("age").as("min")
.sum("age").as("sum")
.count().as("count")
.avg("age").as("avg")
.stdDevPop("age").as("stdDevPop")
.stdDevSamp("age").as("stdDevSamp");
ProjectionOperation projectionOperation=new ProjectionOperation()
.andExclude("_id")
.and("_id").as("age")
.andInclude("max","min","sum","count","avg","stdDevPop","stdDevSamp");
//对输出结果的字段进行修改
Aggregation aggregation=Aggregation.newAggregation(Aggregation.match(criteria),groupOperation,projectionOperation);
AggregationResults<Map> results=mongoTemplate.aggregate(aggregation, "person",Map.class);
return results.getMappedResults();
}
@RequestMapping("/get2")
public List<AgeAggregation> get3(){ //自定义类接受查询结果
Criteria criteria=Criteria.where("age").gte(18);
GroupOperation groupOperation=Aggregation.group("age")
.max("age").as("max")
.min("age").as("min")
.sum("age").as("sum")
.count().as("count")
.avg("age").as("avg")
.stdDevPop("age").as("stdDevPop")
.stdDevSamp("age").as("stdDevSamp");
ProjectionOperation projectionOperation=new ProjectionOperation()
.andExclude("_id")
.and("_id").as("age")
.andInclude("max","min","sum","count","avg","stdDevPop","stdDevSamp");
Aggregation aggregation=Aggregation.newAggregation(Aggregation.match(criteria),groupOperation,projectionOperation);
AggregationResults<AgeAggregation> results=mongoTemplate.aggregate(aggregation, "person",AgeAggregation.class);
return results.getMappedResults();
}
}
**********************
测试输出