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

mongodb - Pipeline $lookup utilisant COLLSCAN au lieu de l'index

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