Spring data mongodb 취 합 조회 (aggregation) 의 bucket

2049 단어 mongodbspringdata
bucket: 범위 별로 묶 기
홈 페이지 네 이 티 브 코드:
db.artwork.aggregate( [  {    $bucket: {      groupBy: "$price",      boundaries: [ 0, 200, 400 ],      default: "Other",      output: {        "count": { $sum: 1 },        "titles" : { $push: "$title" }      }    }  }
] )
필드 설명:
groupby: 그룹의 필드 boundaries: 그룹의 범위 default: 마지막 그룹의 이름
output: 출력의 다른 내용
Spring data mongodb:
실체 클래스: role
@Document(collection = "role")
@TypeAlias("role")
public class Role extends Contact {
        public Role(String name, int age) {
        this.name = name;
        this.age = age;
    }

    private String name;

    private int age;

데이터 삽입:
 mongoTemplate.save(new Role("zhang1",5));
        mongoTemplate.save(new Role("zhang2",6));
        mongoTemplate.save(new Role("zhang3",12));
        mongoTemplate.save(new Role("zhang4",14));
        mongoTemplate.save(new Role("zhang5",23));

테스트 bucket:
        TypedAggregation agg = Aggregation.newAggregation(Role.class,Aggregation.bucket("age")
                .withBoundaries(0,10,20)
                .withDefaultBucket("other1")
                .andOutput("name").count().as("count")
                .andOutput("age").sum().as("sum")
                .andOutput("name").push().as("names"));
        AggregationResults result = mongoTemplate.aggregate(agg,Document.class);
        result.getMappedResults().forEach(document -> System.out.println(document));

결과:
Document{{_id=0, count=2, sum=11, names=[zhang1, zhang2]}}
Document{{_id=10, count=2, sum=26, names=[zhang3, zhang4]}}
Document{{_id=other1, count=1, sum=23, names=[zhang5]}}

주의:
1 출력 count 시 andOutput ("name") 의 name 은 필드 와 무관 하기 때문에 임의로 작성 할 수 있 습 니 다.
2 push 는 각 그룹의 한 필드 (name) 의 모든 값 을 출력 합 니 다.

좋은 웹페이지 즐겨찾기