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

Pagination efficace de l'agrégation MongoDB ?

Dans les méthodes de curseur MongoDB (c'est-à-dire lors de l'utilisation de find() ) comme limit , sort , skip peut être appliqué dans n'importe quel ordre => l'ordre n'a pas d'importance. Un find() renvoie un curseur sur lequel les modifications ont été appliquées. Le tri est toujours effectué avant la limite, le saut est également effectué avant la limite. Donc, en d'autres termes, l'ordre est le suivant :tri -> sauter -> limiter .

La structure d'agrégation ne renvoie pas de curseur de base de données. Au lieu de cela, il renvoie un document avec des résultats d'agrégation. Cela fonctionne en produisant des résultats intermédiaires à chaque étape du pipeline et donc l'ordre des opérations est vraiment important.

Je suppose que MongoDB ne prend pas en charge l'ordre des méthodes de modificateur de curseur en raison de la façon dont il est implémenté en interne.

Vous ne pouvez pas paginer sur un résultat du cadre d'agrégation car il n'y a qu'un seul document avec des résultats uniquement. Vous pouvez toujours paginer sur une requête régulière en utilisant sauter et limiter, mais une meilleure pratique serait d'utiliser une requête de plage en raison de l'efficacité de l'utilisation d'un index.

MISE À JOUR :

Depuis la v2.6, le framework d'agrégation Mongo renvoie un curseur au lieu d'un seul document. Comparez :v2.4 et v2.6 .