MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Moyen efficace de pagination avec MongoDB et ASP.NET MVC

Vous pouvez utiliser SetLimit sur le curseur qui représente la requête. Cela limitera les résultats de MongoDB , pas seulement en mémoire :

var cursor = collection.FindAll(); // Or any other query.
cursor.SetLimit(50); // Will only return 50.
foreach (var item in cursor)
{
    // Process item.
}

Vous pouvez également utiliser SetSkip pour définir un saut (étonnamment):

cursor.SetSkip(10);

Remarque : Vous devez définir ces propriétés sur le curseur avant en l'énumérant. Les définir après n'aura aucun effet.

Au fait, même si vous n'utilisez que Linq Skip de et Take vous ne récupérerez pas des milliers de documents. MongoDB regroupe automatiquement les lots le résultat par taille (le premier lot est d'environ 1mb , le reste fait 4mb chacun) afin que vous n'obteniez que le premier lot et en retiriez les 50 premiers documents. En savoir plus sur

Modifier : Je pense qu'il y a une certaine confusion à propos de LINQ ici :

Skip et Take sont des méthodes d'extension sur IEnumerable et IQueryable . IEnumerable est destiné aux collections de mémoire, mais IQueryable les opérations sont traduites par le fournisseur spécifique (le pilote C# dans ce cas). Donc le code ci-dessus est équivalent à :

foreach (var item in collection.AsQueryable().SetLimit(50))
{
    // Process item.
}