sql >> Databáze >  >> NoSQL >> MongoDB

mongodb - $lookup pipeline používající COLLSCAN místo indexu

Skenování kolekce ve vašem výstupu vysvětlení odkazuje na map_levels kolekce, jak je uvedeno v queryPlanner.namespace hodnota. $lookup fáze sloučí data z jiné kolekce do aktuálního kanálu. Protože jste nezadali žádné fáze dotazu před $lookup , map_levels kolekce bude iterována pomocí skenování kolekce. Pokud se načítá celá kolekce bez jakýchkoli kritérií filtrování nebo řazení, má skenování kolekce menší režii než opakování indexu a načítání dokumentů.

Skenování aktuální sbírky se můžete vyhnout přidáním $match fázi před vaším $lookup (za předpokladu, že nechcete zpracovat úplné map_levels kolekce).

Výstup vysvětlení dotazu bohužel neindikuje (jako v MongoDB 4.0) použití indexu pro $lookup etapy. Řešením by bylo spuštění vysvětlení pomocí pipeline vašeho vyhledávání jako agregační dotaz nejvyšší úrovně.

V nástroji pro sledování problémů MongoDB existuje relevantní problém, který je třeba sledovat/hlasovat:SERVER-22622:Improve $lookup vysvětlit, jak označit plán dotazů v kolekci „od“ .




  1. Chyba dotazování vnořených dokumentů Mongodb Převádí se kruhová struktura na JSON

  2. MongoDB:Počet odpovídajících prvků vnořeného pole

  3. Jak provedu vyhledávací dotaz v Mongoose?

  4. Nelze dotazovat mongoDB pomocí mongoose v node.js