데이터베이스/MongoDB
Spring Mongodb Pagination Helper Code
65살까지 코딩
2023. 12. 20. 21:13
728x90
반응형
$facet과 $limit $skip $project를 통해 쉽게 페이지 네이션을 구현하자.
이 코드를 통해 한방에 페이지네이션을 할 수 있다.
틀은 다음과 같다
{
total: Long,
$지정할데이터이름 : List<지정한 타입>
}
fun Aggregation.pagination(pageable: Pageable, listName: String) {
val skipSize = (pageable.pageSize * pageable.pageNumber).toLong()
val limitSize = pageable.pageSize.toLong()
val pageFacetOperation =
Aggregation.facet(
SkipOperation(skipSize),
LimitOperation(limitSize),
).`as`(listName)
.and(CountOperation("total")).`as`("total")
val pageProjectOperation = Aggregation.project(listName)
.and(
ConditionalOperators.Cond.`when`(Criteria.where("total").ne(emptyList<String>()))
.then(ArrayOperators.ArrayElemAt.arrayOf("total.total").elementAt(0))
.otherwise(0)
).`as`("total")
this.pipeline.add(pageFacetOperation)
this.pipeline.add(pageProjectOperation)
}
728x90
반응형