sql >> Base de Datos >  >> NoSQL >> MongoDB

Forma eficiente de paginación con MongoDB y ASP.NET MVC

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);

Nota: Debe establecer esas propiedades en el cursor antes enumerándolo. Si se configuran después, no tendrá ningún efecto.

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