Du kan bruge SetLimit
på markøren, der repræsenterer forespørgslen. Det vil begrænse resultaterne fra MongoDB
, ikke kun i hukommelsen:
var cursor = collection.FindAll(); // Or any other query.
cursor.SetLimit(50); // Will only return 50.
foreach (var item in cursor)
{
// Process item.
}
Du kan også bruge SetSkip
for at indstille et spring (overraskende):
cursor.SetSkip(10);
Bemærk: Du skal indstille disse egenskaber på markøren før opregne det. Indstilling af disse efter vil ikke have nogen effekt.
Forresten, selvom du kun bruger Linq
's Skip
og Take
du vil ikke hente tusindvis af dokumenter. MongoDB
automatisk batcher
resultatet efter størrelse (første batch er ca. 1mb
, resten er 4mb
hver), så du ville kun få den første batch og tage de første 50 dokumenter ud af den. Mere om
Rediger: Jeg tror, der er en vis forvirring omkring LINQ
her:
Skip
og Take
er udvidelsesmetoder på begge IEnumerable
og IQueryable
. IEnumerable
er beregnet til i hukommelsessamlinger, men IQueryable
operationer er oversat af den specifikke udbyder (C#-driveren i dette tilfælde). Så ovenstående kode svarer til:
foreach (var item in collection.AsQueryable().SetLimit(50))
{
// Process item.
}