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 .