Като цяло, да. Ако имате монотонно поле, в идеалния случай индексирано поле, можете просто да вървите по него. Например, ако използвате полета от тип ObjectId
като първичен ключ или ако имате CreatedDate
или нещо подобно, можете просто да използвате $lt
заявка, вземете фиксиран брой елементи, след което заявете отново, като използвате $lt
от най-малкия _id
или CreatedDate
срещнахте в предишната група.
Внимавайте със строгото монотонно поведение спрямо нестрогото монотонно поведение:може да се наложи да използвате $lte
ако ключовете не са стриктни, тогава предотвратете правенето на неща два пъти на дуповете. Тъй като _id
полето е уникално, ObjectIds
винаги са строго монотонни.
Ако нямате такъв ключ, нещата са малко по-трудни. Все още можете да итерирате „по индекса“ (какъвто и индекс, било то име, хеш, UUID, Guid и т.н.). Това работи също толкова добре, но е трудно да направите моментна снимка, защото никога не знаете дали резултатът, който току-що сте намерили, е бил вмъкнат, преди да започнете да преминавате, или не. Освен това, когато документите се вмъкват в началото на обхождането, те ще бъдат пропуснати.