Samlingsscanningen i dit forklaringsoutput refererer til map_levels
samling, som angivet i queryPlanner.namespace
værdi. $lookup
fase fletter data fra en anden samling til den aktuelle pipeline. Da du ikke har angivet nogen forespørgselsstadier før $lookup
, map_levels
samling vil blive itereret ved hjælp af en samlingsscanning. Hvis en hel samling indlæses uden nogen filtrerings- eller sorteringskriterier, har en samlingsscanning mindre overhead end at iterere et indeks og hente dokumenterne.
Du kan undgå den aktuelle samlingsscanning ved at tilføje en $match
trin før din $lookup
(forudsat at du ikke ønsker at behandle de fulde map_levels
samling).
Desværre indikerer forespørgselsforklaringsoutput (som ved MongoDB 4.0) ikke indeksbrug for $lookup
niveauer. En løsning på dette ville være at køre forklaring ved hjælp af dit opslags pipeline
som en aggregeringsforespørgsel på øverste niveau.
Der er et relevant problem at se/stemme op i MongoDB Issue tracker:SERVER-22622:Forbedre $lookup forklar for at angive forespørgselsplan på "fra"-samlingen .