Můžete použít SetLimit
na kurzor, který představuje dotaz. To omezí výsledky z MongoDB
, nejen v paměti:
var cursor = collection.FindAll(); // Or any other query.
cursor.SetLimit(50); // Will only return 50.
foreach (var item in cursor)
{
// Process item.
}
Můžete také použít SetSkip
pro nastavení přeskočení (překvapivě):
cursor.SetSkip(10);
Poznámka: Tyto vlastnosti musíte nastavit na kurzor před vyjmenovávat to. Nastavení těchto po nebude mít žádný účinek.
Mimochodem, i když používáte pouze Linq
Skip
a Take
nebudete získávat tisíce dokumentů. MongoDB
automatické dávkování
výsledek podle velikosti (první dávka je asi 1mb
, zbytek je 4mb
každý), takže byste získali pouze první dávku a vzali byste z ní prvních 50 dokumentů. Více na
Upravit: Myslím si, že ohledně LINQ
je nějaký zmatek zde:
Skip
a Take
jsou metody rozšíření na obou IEnumerable
a IQueryable
. IEnumerable
je určeno pro sbírky paměti, ale IQueryable
operace jsou přeloženy konkrétním poskytovatelem (v tomto případě ovladač C#). Výše uvedený kód je tedy ekvivalentní s:
foreach (var item in collection.AsQueryable().SetLimit(50))
{
// Process item.
}