Closed LineNo2 closed 1 year ago
@Override
public Page<Cafe> findByIds(List<String> cafes, Pageable pageable) {
Criteria criteria = Criteria.where("cafeId").in(cafes);
MatchOperation matchOperation = Aggregation.match(criteria);
// 전체 size를 알기 위한 쿼리
Aggregation countAggregation = Aggregation.newAggregation(matchOperation);
AggregationResults<Cafe> countResults = mongoTemplate.aggregate(countAggregation, Cafe.class, Cafe.class);
int totalCount = countResults.getMappedResults().size();
// pagination size를 알기 위한 쿼리
Aggregation aggregation = Aggregation.newAggregation(
matchOperation,
Aggregation.skip(pageable.getOffset()),
Aggregation.limit(pageable.getPageSize())
);
List<Cafe> cafesResult = mongoTemplate.aggregate(aggregation, Cafe.class, Cafe.class).getMappedResults();
return new PageImpl<>(cafesResult, pageable, totalCount);
}
totalCount 값을 넣어줌으로 실제 검색 결과에 모든 행의 개수를 알게 하였고, Pagelmpl에 해당 데이터를 함께 넣으니 잘 false가 나타남!
✏️ 설명
카페의 Best 항목을 가져올 때, 다음 페이지가 남아있음에도 불구하고
last : false
로 출력되는 오류🌌 발생 Controller
api/cafe/best
🧾 상황 재현
page=0&size=1
로 쿼리를 날린다. 그 후page=1&size=1
로 다시 한번 날린다.💻 결과
page=0&size=1
page=1&size=1