MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

mongodb - $lookup pipeline usando COLLSCAN em vez de índice


A varredura de coleção em sua saída de explicação está se referindo ao map_levels coleção, conforme observado no queryPlanner.namespace valor. A $lookup stage mescla dados de outra coleção no pipeline atual. Como você não especificou nenhum estágio de consulta antes do $lookup , os map_levels coleção será iterada usando uma varredura de coleção. Se uma coleção inteira estiver sendo carregada sem nenhum critério de filtragem ou classificação, uma varredura de coleção terá menos sobrecarga do que iterar um índice e buscar os documentos.

Você pode evitar a verificação da coleção atual adicionando um $match estágio antes do seu $lookup (assumindo que você não deseja processar os map_levels completos coleção).

Infelizmente, a saída da explicação da consulta não (como no MongoDB 4.0) indica o uso do índice para $lookup estágios. Uma solução alternativa para isso seria executar a explicação usando o pipeline da sua pesquisa como uma consulta de agregação de nível superior.

Há um problema relevante para assistir/votar no rastreador de problemas do MongoDB:SERVER-22622:Improve $lookup explicar para indicar o plano de consulta na coleção "de" .