2012-11-22 34 views
6

tôi có câu hỏi về phân trang bằng cách sử dụng mongodb và mongoengine. tôi có một bảng có hàng triệu hồ sơ trong tương lai. và tôi đang thực hiện phân trang như thế này.cách phân trang bằng cách sử dụng mongoengine?

tôi cũng không chắc chắn đây là cách tiếp cận đúng

list = Books.objects.all() 
    paginator = DiggPaginator(list, 20, body = 10, tail = 2) 

đây tôi mở toàn bộ bảng và sau đó làm pagination và chúng tôi trên cho trang tiếp theo một lần nữa trên mã chạy và mang thứ 2 hoặc bất kỳ trang nào.

là cách tiếp cận chính xác này hoặc có bất kỳ cách nào tốt hơn để thực hiện việc này.

Trả lời

16

Bạn có thể sử dụng skiplimit từ QuerySet để đạt được phân trang.
Ví dụ, nếu bạn muốn hiển thị trang thứ hai với một hạn chế của 10 mặt hàng trên mỗi trang, bạn có thể làm như thế này:

page_nb = 2 
items_per_page = 10 

offset = (page_nb - 1) * items_per_page 

list = Books.objects.skip(offset).limit(items_per_page) 
+0

Điều đó có nghĩa là cách tiếp cận của tôi không chính xác? hoặc điều đó sẽ làm việc tốt quá mà không đặt bất kỳ phụ tải trên máy chủ. – user493550

+1

Bằng cách sử dụng 'Books.objects.all()', bạn yêu cầu tất cả các tài liệu từ bảng, vì vậy nếu bảng của bạn có hàng triệu bản ghi sẽ đặt một số tải trên máy chủ. Dù sao, nó sẽ là tầm thường để thiết lập một điểm chuẩn để kiểm tra những gì là hiệu quả nhất cho trường hợp sử dụng của bạn. – Eric

Các vấn đề liên quan