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

Performances terriblement dégradées avec d'autres conditions de jointure dans $lookup (en utilisant le pipeline)

La deuxième version ajoute une exécution de pipeline d'agrégation pour chaque document de la collection jointe .

La documentation dit :

Le pipeline est exécuté pour chaque document de la collection, et non pour chaque document correspondant.

Selon la taille de la collection (à la fois le nombre de documents et la taille du document), cela peut prendre un temps décent.

Logique - tous les documents supplémentaires dus à la suppression de la limite doivent également avoir le pipeline d'agrégation exécuté pour eux.

Il est possible que l'exécution par document du pipeline d'agrégation ne soit pas aussi optimisée qu'elle pourrait l'être. Par exemple, si le pipeline est configuré et supprimé pour chaque document, il pourrait facilement y avoir plus de frais généraux dans cela que dans les conditions $match.

L'exécution d'un pipeline d'agrégation par document joint offre une flexibilité supplémentaire. Si vous avez besoin de cette flexibilité, il peut être judicieux d'exécuter le pipeline, même si les performances doivent être prises en compte malgré tout. Si vous ne le faites pas, il est judicieux d'utiliser une approche plus performante.