skip/limit đơn giản nhưng chậm khi offset lớn vì database vẫn phải bỏ qua nhiều documents. Cursor/keyset pagination dùng sort key ổn định như createdAt + _id, hiệu quả hơn cho feed lớn.
Ví dụ:
javascript
db.posts.find({ createdAt: { $lt: lastCreatedAt } })
.sort({ createdAt: -1, _id: -1 })
.limit(20)Cần index khớp sort/filter.
Với sort key trùng nhau, thêm _id làm tie-breaker để tránh mất/trùng records.