Phân trang & Sắp xếp

Sử dụng paging tìm kiếm thông thường, PageStream reactive, trang aggregation và SortSpec có thứ tự theo mục đích.


phân trang tìm kiếm thông thường

java
Flux<User> users = dsl
    .executeEntity(User.class, MongoTemplateName.FRONT)
    .fields(pair("status", "ACTIVE"))
    .end()
    .findAll()
    .paging(0, 20)
    .sorts(sort -> sort.desc("id"))
    .execute();

pageNumber là 0-based. Có thể sử dụng builder lồng ghép dạng paging().pageNumber(...).pageSize(...).and().

PageStream

java
PageStream<User> page = dsl
    .executeEntity(User.class, MongoTemplateName.FRONT)
    .fields(pair("status", "ACTIVE"))
    .end()
    .findAll()
    .paging(0, 20)
    .executePageStream();

Flux<User> data = page.data();
Mono<Long> totalCount = page.totalCount();

대량 처리에서 data를 즉시 List로 모으고 싶지 않다면 PageStream을 사용합니다. 필요하면 collectToPageResult()로 PageResult<T>로 변환할 수 있습니다.

Phân trang tổng hợp

java
PageStream<User> page = dsl
    .executeEntity(User.class, MongoTemplateName.FRONT)
    .fields(pair("status", "ACTIVE"))
    .end()
    .findAll()
    .paging(0, 20)
    .executeAggregationPageStream();

Mono<PageResult<User>> collected = dsl
    .executeEntity(User.class, MongoTemplateName.FRONT)
    .fields(pair("status", "ACTIVE"))
    .end()
    .findAll()
    .paging(0, 20)
    .executeAggregation();

executeAggregation()은 reactive page data를 최종 List로 collect해 PageResult<T>를 만듭니다. stream 상태가 중요하면 executeAggregationPageStream()을 사용합니다.

SortSpec

java
.sorts(sort -> sort
    .desc("score")
    .asc("createdAt")
    .desc("id")
    .driver(Sorts.metaTextScore("textScore"))
)

Khóa sắp xếp giữ nguyên thứ tự đã thêm. Hướng động có thể sử dụng sort.of(direction, field) và sắp xếp gốc của Driver có thể được trộn với driver(Bson).

© 2026 Byeolnaerim. Bảo lưu mọi quyền.Giới thiệuChính sách xử lý thông tin cá nhân