공부 흔적남기기

Spring Mongodb Pagination Helper Code 본문

데이터베이스/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
반응형