Możesz użyć SetLimit
na kursorze reprezentującym zapytanie. To ograniczy wyniki z MongoDB
, nie tylko w pamięci:
var cursor = collection.FindAll(); // Or any other query.
cursor.SetLimit(50); // Will only return 50.
foreach (var item in cursor)
{
// Process item.
}
Możesz także użyć SetSkip
ustawić pominięcie (o dziwo):
cursor.SetSkip(10);
Uwaga: Musisz ustawić te właściwości na kursorze przed wyliczając to. Ustawienie tych po nie przyniesie żadnego efektu.
Przy okazji, nawet jeśli używasz tylko Linq
Skip
i Take
nie będziesz pobierać tysięcy dokumentów. MongoDB
automatycznie partiami
wynik według rozmiaru (pierwsza partia to około 1mb
, reszta to 4mb
każdy), więc dostaniesz tylko pierwszą partię i wyjmiesz z niej pierwszych 50 dokumentów. Więcej na
Edytuj: Myślę, że jest trochę zamieszania co do LINQ
tutaj:
Skip
i Take
są metodami rozszerzającymi na obu IEnumerable
i IQueryable
. IEnumerable
jest przeznaczony do kolekcji pamięci, ale IQueryable
operacje są tłumaczone przez konkretnego dostawcę (w tym przypadku sterownik C#). Więc powyższy kod jest równoważny z:
foreach (var item in collection.AsQueryable().SetLimit(50))
{
// Process item.
}