본문 바로가기
[ Developer ]/MongoDB

[MongoDB] 몽고디비 스프링 Aggregation 사용

by 김현섭. 2016. 7. 4.
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
Spring-Data-MongoDB Aggregation 사용하기

@ Sort 정렬하기
이전의 방식 Aggregation 패턴을 이용해서 Sort를 진행해본다


기존 Aggregation 패턴에서 Operation을 추가하고 Aggregation에 추가를 해주면 된다
sort할 항목과 오름차순, 내림차순을 입력해주면 된다

@ Skip 건너뛰기


건너뛰기도 SkipOpration으로 추가 후 Aggregation에 추가를 해주면 된다
Aggregation.skip(); 에 넣은 데이터 만큼 건너뛰고 출력을 해준다


@ Limit 지정한 수 만큼 가져오기


Limit도 LimitOpration으로 추가 후 Aggregation에 추가를 해주면 된다
Aggregation.limit(); 에 넣은 데이터 만큼 출력을 해준다


* Aggregation - Method
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
     public void findData(String key, String value) {
          
          Criteria criteria = new Criteria(key);
          criteria.is(value);
          
          // 검색하기
          MatchOperation match = Aggregation.match(criteria);
          
          // 정렬하기
          SortOperation sort = Aggregation.sort(Sort.Direction.DESC, "_id");
          
          // 건너뛰기
          SkipOperation skip = Aggregation.skip(5);
          
          // 지정한 수 만큼 가져오기
          LimitOperation limit = Aggregation.limit(2);
          
          Aggregation aggregation = Aggregation.newAggregation(match,sort,skip,limit);
          
          AggregationResults<MongoTestVO> result = mongoTemplate.aggregate(aggregation, "person", MongoTestVO.class);
          
          List<MongoTestVO> dataList = result.getMappedResults();
          
          for (MongoTestVO mongoTestVO : dataList) {
             System.out.println(mongoTestVO.getName());
             System.out.println(mongoTestVO.getAddress());
             System.out.println(mongoTestVO.getId());
          }
          
       }
cs


@ Paging
위의 findData를 그대로 복사해서 pagingData로 변경을 해서 Paging을 해본다
Paging을 위해서 파라미터를 pageNo을 하나 더 가져온 후 skip을 수정한다



위와 같이 main에서 2페이지를 넣으면 아래와 같이 180~189번의 둘리가 나온다


또한 1을 넣으면 190~199가 나오게 된다


페이지 번호로 10개씩 페이징 목록을 가져오는 것을 알 수 있다

*Paging - Method
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
    private void pagingData(String key, String value, int pageNo) {
        
        Criteria criteria = new Criteria(key);
        criteria.is(value);
        
        MatchOperation match = Aggregation.match(criteria);
        
        // 정렬
        SortOperation sort = Aggregation.sort(Sort.Direction.DESC, "_id");
        
        // 건너뛰기
        SkipOperation skip = Aggregation.skip((pageNo - 1* 10);
        
        // 지정한 수 만큼 가져오기
        LimitOperation limit = Aggregation.limit(10);
        
        Aggregation aggregation = Aggregation.newAggregation(match, sort, skip, limit);
        
        AggregationResults<MongoTestVO> result = mongoTemplate.aggregate(aggregation, "person", MongoTestVO.class);
        
        List<MongoTestVO> dataList = result.getMappedResults();
        
        for (MongoTestVO mongoTestVO : dataList) {
            System.out.println("ID " + mongoTestVO.getId());
            System.out.println("Name " + mongoTestVO.getName());
            System.out.println("Address " + mongoTestVO.getAddress());
        }
    }
cs