MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Phân trang theo phạm vi MongoDB

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});


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. arrayFilters trong mongodb

  2. Nhóm MongoDB theo mảng phần tử bên trong

  3. Tại sao mongoDB sử dụng objectID?

  4. Khoảng cách in MongoDB giữa hai điểm

  5. Tôi cần có những đặc quyền người dùng MongoDB nào để thêm người dùng vào cơ sở dữ liệu mongo mới / khác?