MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

mongodb - $lookup pipeline utilizzando COLLSCAN invece di index

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