Puede usar SetLimit
en el cursor que representa la consulta. Eso limitará los resultados de MongoDB , no solo en la memoria:
var cursor = collection.FindAll(); // Or any other query.
cursor.SetLimit(50); // Will only return 50.
foreach (var item in cursor)
{
// Process item.
}
También puede usar SetSkip
para establecer un salto (sorprendentemente):
cursor.SetSkip(10);
Por cierto, incluso si solo usas Linq Skip y Take no recuperará miles de documentos. MongoDB lotes automáticos
el resultado por tamaño (el primer lote es de aproximadamente 1mb , el resto son 4mb cada uno), por lo que solo obtendría el primer lote y sacaría los primeros 50 documentos. Más sobre
Editar: Creo que hay cierta confusión sobre LINQ aquí:
Skip y Take son métodos de extensión en ambos IEnumerable y IQueryable . IEnumerable está destinado a colecciones de memoria, pero IQueryable las operaciones son traducidas por el proveedor específico (el controlador C# en este caso). Así que el código anterior es equivalente a:
foreach (var item in collection.AsQueryable().SetLimit(50))
{
// Process item.
}