Tôi có mongodb và NodeJs. Kết nối được thực hiện qua mongoosejs.
Cách tốt nhất để phát triển cuộn vô cực ajax là gì? Tôi có nên sử dụng giới hạn và bù đắp không?Cách tốt nhất để thực hiện phân trang ajax với MongoDb và Nodejs là gì?
13
A
Trả lời
33
cách tiếp cận "bỏ qua và giới hạn" không hiệu quả lắm khi bạn phân trang đến tập dữ liệu. Đó là hiệu quả là Shlemiel the Painter's algorithm.
Truy vấn phạm vi hiệu quả hơn nhiều (khi được chỉ mục hỗ trợ). Ví dụ, hãy tưởng tượng rằng bạn đang hiển thị tweet. kích thước trang của bạn là 20 và bạn đang trên trang 1000 và muốn vào trang tải 1001.
Truy vấn này
db.tweets.find().sort({created_at: -1}).skip(1001*20).limit(20)
là nhiều kém hiệu quả hơn
db.tweets.find({created_at: {$lt: last_displayed_date}}).
sort({created_at: -1}).limit(20);
(với điều kiện bạn có chỉ số trên created_at
).
Bạn nhận được ý tưởng: khi bạn tải một trang, hãy lưu ý dấu thời gian của tweet cuối cùng và sử dụng nó để truy vấn trang tiếp theo.
Việc cần làm nếu có một số tweet được tạo cùng một lúc bởi những người dùng khác nhau nhưng tôi cần hiển thị chúng? –
Chính xác cùng một mili giây? Tôi không nghĩ vậy. –
Nếu trường hợp đó xảy ra, sắp xếp theo 'created_at: -1, user_id: 1' –