2011-07-24 11 views
11

trên các tài liệu MongoDB nó nói: (source)Phạm vi dựa paging MongoDB

Thật không may bỏ qua có thể được (rất) tốn kém và đòi hỏi máy chủ để đi bộ từ đầu của bộ sưu tập, hoặc chỉ số, để có được vị trí bù đắp/bỏ qua trước khi nó có thể bắt đầu trả lại trang dữ liệu (giới hạn). Khi số trang tăng, bỏ qua sẽ trở nên chậm hơn và nhiều hơn nữa cpu chuyên sâu, và có thể IO bị ràng buộc, với các bộ sưu tập lớn hơn. Phạm vi phân trang dựa trên cung cấp việc sử dụng các chỉ mục tốt hơn nhưng không cho phép bạn dễ dàng chuyển đến một trang cụ thể.

Phân trang dựa trên phạm vi là gì và tài liệu cho nó ở đâu?

Trả lời

17

Ý tưởng cơ bản là viết phân trang vào mẫu biến vị ngữ truy vấn.

Ví dụ: nếu bạn liệt kê các bài đăng trên diễn đàn theo ngày và bạn muốn hiển thị trang tiếp theo, hãy sử dụng ngày của bài đăng cuối cùng trên trang hiện tại làm vị từ. MongoDB có thể sử dụng chỉ mục được xây dựng trên trường ngày tháng.

//older posts 
db.forum_posts.find({date: {$lt: ..last_post_date..} }).sort({date: -1}).limit(20); 

Tất nhiên điều này sẽ phức tạp hơn một chút nếu trường bạn đang sử dụng để sắp xếp không phải là duy nhất.

+0

Cảm ơn, làm thế nào để tôi nhận được 10 trước và sau 10? – Harry

+0

ví dụ cho thấy cách truy xuất các phần tử "tiếp theo 10", "10 trước" tương tự, chỉ cần sử dụng '{$ gt: ..first_post_on_page_date ..}' –

+0

Hãy nhớ đặt chỉ mục vào trường ngày, nếu không thì không hoạt động – Maxence