在Java中操作MongoDB時會遇到分頁查詢數據的情況,此時我們可以按如下步驟來實現:
1、創建一個分頁類
import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; public class MongoDbPageable implements Pageable { /**分頁碼*/ private int pageNumber = 1; /**每頁大小*/ private int pageSize = 10; /**排序*/ private Sort sort; @Override public int getPageNumber() { return pageNumber; } public void setCurrentPage(int pageNumber) { this.pageNumber = pageNumber; } @Override public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } @Override public Sort getSort() { return sort; } public void setSort(Sort sort) { this.sort = sort; } @Override public long getOffset() { return (pageNumber - 1) * pageSize; } @Override public Pageable first() { return PageRequest.of(0, pageSize, sort); } @Override public boolean hasPrevious() { return false; } @Override public Pageable next() { return PageRequest.of(pageNumber + 1, pageSize, sort); } @Override public Pageable previousOrFirst() { return pageNumber == 0 ? this : PageRequest.of(pageNumber - 1, pageSize, sort); } }
2、分頁類的實踐
private List<Object> find(int pageNumber, int pageSize, Sort.Direction direction){ MongoDbPageable pageable = new MongoDbPageable(); pageable.setCurrentPage(pageNumber); pageable.setPageSize(pageSize); // direction: Sort.Direction.DESC或者Sort.Direction.ASC Sort sort = new Sort(direction, "_id"); pageable.setSort(sort); Query query = new Query(); query.with(pageable); return mongoTemplate.find(query, Object.class, collectionName); }
說明:分頁類具有排序的功能,實踐中是按照ObjectId(_id)進行降序排列的。