Можете да използвате SetLimit
върху курсора, който представлява заявката. Това ще ограничи резултатите от MongoDB , не само в паметта:
var cursor = collection.FindAll(); // Or any other query.
cursor.SetLimit(50); // Will only return 50.
foreach (var item in cursor)
{
// Process item.
}
Можете също да използвате SetSkip
за да зададете пропуск (изненадващо):
cursor.SetSkip(10);
Забележка: Трябва да зададете тези свойства на курсора преди изброявайки го. Задаването на тези след това няма да има ефект.
Между другото, дори ако използвате само Linq Skip на и Take няма да извличате хиляди документи. MongoDB автоматично пакетира
резултатът по размер (първата партида е около 1mb , останалите са 4mb всеки), така че ще получите само първата партида и ще вземете първите 50 документа от нея. Повече на
Редактиране: Мисля, че има известно объркване относно LINQ тук:
Skip и Take са методи за разширение и на IEnumerable и IQueryable . IEnumerable е предназначено за колекции от памет,но IQueryable операциите са преведени от конкретния доставчик (C# драйвера в този случай). Така горният код е еквивалентен на:
foreach (var item in collection.AsQueryable().SetLimit(50))
{
// Process item.
}