Du kan använda SetLimit
på markören som representerar frågan. Det kommer att begränsa resultaten från MongoDB
, inte bara i minnet:
var cursor = collection.FindAll(); // Or any other query.
cursor.SetLimit(50); // Will only return 50.
foreach (var item in cursor)
{
// Process item.
}
Du kan också använda SetSkip
för att ställa in ett hoppa över (överraskande):
cursor.SetSkip(10);
Obs! Du måste ställa in dessa egenskaper på markören före räkna upp det. Att ställa in dessa efter kommer inte att ha någon effekt.
Förresten, även om du bara använder Linq
s Skip
och Take
du kommer inte att hämta tusentals dokument. MongoDB
batcherar automatiskt
resultatet efter storlek (första batchen är ungefär 1mb
, resten är 4mb
varje) så att du bara skulle få den första batchen och ta de första 50 dokumenten ur den. Mer om
Redigera: Jag tror att det finns en viss förvirring om LINQ
här:
Skip
och Take
är tilläggsmetoder på båda IEnumerable
och IQueryable
. IEnumerable
är avsedd för minnessamlingar, men IQueryable
operationer är översatta av den specifika leverantören (C#-drivrutinen i det här fallet). Så ovanstående kod är likvärdig med:
foreach (var item in collection.AsQueryable().SetLimit(50))
{
// Process item.
}