Nói chung, có. Nếu bạn có một trường đơn điệu, lý tưởng là một trường được lập chỉ mục, bạn có thể chỉ cần đi dọc theo trường đó. Ví dụ:nếu bạn đang sử dụng các trường thuộc loại ObjectId
làm khóa chính hoặc nếu bạn có CreatedDate
hoặc một cái gì đó, bạn có thể chỉ cần sử dụng $lt
truy vấn, lấy một số phần tử cố định, sau đó truy vấn lại bằng cách sử dụng $lt
của _id
nhỏ nhất hoặc CreatedDate
bạn đã gặp trong lô trước.
Hãy cẩn thận về hành vi đơn điệu nghiêm ngặt so với hành vi đơn điệu không nghiêm ngặt:Bạn có thể phải sử dụng $lte
nếu các phím không nghiêm ngặt, thì hãy ngăn chặn việc thực hiện hai lần trên bản lừa đảo. Kể từ _id
trường là duy nhất, ObjectIds
luôn luôn đơn điệu nghiêm ngặt.
Nếu bạn không có chìa khóa như vậy, mọi thứ sẽ phức tạp hơn một chút. Bạn vẫn có thể lặp lại 'dọc theo chỉ mục' (bất kỳ chỉ mục nào, có thể là tên, mã băm, UUID, Hướng dẫn, v.v.). Điều đó cũng hoạt động tốt, nhưng rất khó để thực hiện chụp nhanh, bởi vì bạn không bao giờ biết liệu kết quả bạn vừa tìm thấy có được chèn vào trước khi bạn bắt đầu duyệt hay không. Ngoài ra, khi các tài liệu được chèn vào đầu quá trình truyền tải, những tài liệu đó sẽ bị bỏ sót.