Paging & Pengurutan
Menggunakan paging find umum, PageStream reaktif, halaman agregasi, dan SortSpec terurut sesuai tujuan.
Paging find umum
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 adalah berbasis 0. Bentuk builder bersarang paging().pageNumber(...).pageSize(...).and() juga dapat digunakan.
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>로 변환할 수 있습니다.
Penggabungan paging
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"))
)Kunci pengurutan mempertahankan urutan yang ditambahkan. Arah dinamis dapat menggunakan sort.of(direction, field) dan pengurutan native Driver dapat dicampur dengan driver(Bson).