Câu hỏi hay!
"Có bao nhiêu là quá nhiều?" - điều đó, tất nhiên, phụ thuộc vào kích thước dữ liệu và yêu cầu hiệu suất của bạn. Cá nhân tôi cảm thấy không thoải mái khi bỏ qua hơn 500-1000 bản ghi.
Câu trả lời thực tế phụ thuộc vào yêu cầu của bạn. Đây là những gì các trang web hiện đại làm (hoặc ít nhất là một số trong số chúng).
Đầu tiên, thanh điều hướng trông giống như sau:
1 2 3 ... 457
Họ nhận được số trang cuối cùng từ tổng số bản ghi và kích thước trang. Hãy chuyển sang trang 3. Điều đó sẽ liên quan đến việc bỏ qua một số từ bản ghi đầu tiên. Khi có kết quả, bạn biết id của bản ghi đầu tiên trên trang 3.
1 2 3 4 5 ... 457
Hãy bỏ qua một số phần nữa và chuyển đến trang 5.
1 ... 3 4 5 6 7 ... 457
Bạn có được ý tưởng. Tại mỗi thời điểm, bạn sẽ thấy các trang đầu tiên, trang cuối cùng và trang hiện tại cũng như hai trang chuyển tiếp và lùi lại so với trang hiện tại.
Truy vấn
var current_id; // id of first record on current page.
// go to page current+N
db.collection.find({_id: {$gte: current_id}}).
skip(N * page_size).
limit(page_size).
sort({_id: 1});
// go to page current-N
// note that due to the nature of skipping back,
// this query will get you records in reverse order
// (last records on the page being first in the resultset)
// You should reverse them in the app.
db.collection.find({_id: {$lt: current_id}}).
skip((N-1)*page_size).
limit(page_size).
sort({_id: -1});