Ogólnie tak. Jeśli masz pole monotoniczne, najlepiej pole indeksowane, możesz po prostu iść wzdłuż niego. Na przykład, jeśli używasz pól typu ObjectId
jako klucz podstawowy lub jeśli masz CreatedDate
czy coś, możesz po prostu użyć $lt
zapytanie, weź stałą liczbę elementów, a następnie wykonaj zapytanie ponownie używając $lt
z najmniejszego _id
lub CreatedDate
napotkałeś w poprzedniej partii.
Uważaj na ścisłe monotoniczne zachowanie w porównaniu z nieścisłym monotonicznym zachowaniem:być może będziesz musiał użyć $lte
jeśli klucze nie są surowe, zapobiegaj robieniu rzeczy dwa razy na duplikatach. Ponieważ _id
pole jest unikalne, ObjectIds
są zawsze ściśle monotoniczne.
Jeśli nie masz takiego klucza, sprawy są nieco trudniejsze. Nadal możesz iterować „wzdłuż indeksu” (niezależnie od indeksu, czy to nazwy, skrótu, UUID, Guid itp.). Działa to równie dobrze, ale wykonywanie migawek jest trudne, ponieważ nigdy nie wiadomo, czy wynik, który właśnie znalazłeś, został wstawiony przed rozpoczęciem przechodzenia, czy nie. Ponadto, gdy dokumenty zostaną wstawione na początku przemierzania, zostaną one pominięte.