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