sql >> Databasteknik >  >> NoSQL >> MongoDB

mongodb - $lookup pipeline med COLLSCAN istället för index

Samlingsskanningen i din explain-utdata hänvisar till map_levels samling, som anges i queryPlanner.namespace värde. $lookup steg slår samman data från en annan samling till den aktuella pipeline. Eftersom du inte har angett några frågesteg före $lookup , map_levels samlingen upprepas med en samlingsskanning. Om en hel samling laddas utan några filtrerings- eller sorteringskriterier, har en samlingsskanning mindre overhead än att iterera ett index och hämta dokumenten.

Du kan undvika den aktuella samlingsskanningen genom att lägga till en $match steg före din $lookup (förutsatt att du inte vill bearbeta alla map_levels samling).

Tyvärr indikerar inte frågeförklaringsutdata (som vid MongoDB 4.0) indexanvändning för $lookup etapper. En lösning för detta skulle vara att köra förklara med din uppslagnings pipeline som en aggregeringsfråga på toppnivå.

Det finns ett relevant problem att se/rösta upp i MongoDB Issue Tracker:SERVER-22622:Förbättra $lookup förklara för att ange frågeplan på "från"-samlingen .




  1. ActionCable på AWS:Fel under WebSocket-handskakning:Oväntad svarskod:404

  2. spring-boot redis :Hur ogiltigförklarar man alla sessioner för en användare?

  3. mongoDB kartlägga/minska minus reducera

  4. Spring data mongodb-fråga konverterar String till ObjectId automatiskt