Можете да използвате 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.
}