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.
}