L'analyse de la collection dans votre sortie d'explication fait référence aux map_levels
collection, comme indiqué dans le queryPlanner.namespace
évaluer. La $lookup
fusionne les données d'une autre collection dans le pipeline actuel. Étant donné que vous n'avez spécifié aucune étape de requête avant le $lookup
, les map_levels
collection sera itérée à l'aide d'un balayage de collection. Si une collection entière est chargée sans aucun critère de filtrage ou de tri, une analyse de collection a moins de temps système que l'itération d'un index et la récupération des documents.
Vous pouvez éviter l'analyse de la collection en cours en ajoutant un $match
étape avant votre $lookup
(en supposant que vous ne souhaitiez pas traiter l'ensemble des map_levels
collecte).
Malheureusement, la sortie d'explication de la requête n'indique pas (comme à MongoDB 4.0) l'utilisation de l'index pour $lookup
étapes. Une solution de contournement pour cela serait d'exécuter expliquer en utilisant le pipeline
de votre recherche en tant que requête d'agrégation de niveau supérieur.
Il y a un problème pertinent à surveiller/voter dans le suivi des problèmes de MongoDB :SERVER-22622 :Améliorer $lookup expliquer pour indiquer le plan de requête sur la collection "de" .