La scansione della raccolta nel tuo output di spiegazione si riferisce a map_levels
raccolta, come indicato nel queryPlanner.namespace
valore. La $lookup
stage unisce i dati di un'altra raccolta alla pipeline corrente. Poiché non hai specificato alcuna fase della query prima di $lookup
, i map_levels
la raccolta verrà ripetuta utilizzando una scansione della raccolta. Se un'intera raccolta viene caricata senza alcun criterio di filtraggio o ordinamento, una scansione della raccolta ha un sovraccarico minore rispetto all'iterazione di un indice e al recupero dei documenti.
Puoi evitare la scansione della raccolta corrente aggiungendo un $match
fase prima del tuo $lookup
(supponendo che tu non voglia elaborare tutti i map_levels
raccolta).
Sfortunatamente la query spiega che l'output non (come in MongoDB 4.0) indica l'utilizzo dell'indice per $lookup
fasi. Una soluzione alternativa potrebbe essere l'esecuzione di spiegare utilizzando la pipeline
della tua ricerca come query di aggregazione di primo livello.
C'è un problema rilevante da guardare/votare nell'elenco dei problemi di MongoDB:SERVER-22622:Improve $lookup spiegare per indicare il piano di query sulla raccolta "da" .