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

Strašně snížený výkon s jinými podmínkami spojení v $lookup (pomocí kanálu)

Druhá verze přidává spuštění agregačního kanálu pro každý dokument ve spojené kolekci .

Dokumentace říká:

Potrubí se spustí pro každý dokument v kolekci, nikoli pro každý odpovídající dokument.

V závislosti na tom, jak velká je sbírka (jak počet dokumentů, tak velikost dokumentu), to může vyjít na slušné množství času.

Dává to smysl – pro všechny další dokumenty kvůli odstranění limitu musí být také proveden agregační kanál.

Je možné, že provádění agregačního kanálu pro jednotlivé dokumenty není tak optimalizované, jak by mohlo být. Pokud je například pro každý dokument nastaven a zlikvidován kanál, může to být snadno to než v $match podmínkách.

Provedení agregačního kanálu na spojený dokument poskytuje další flexibilitu. Pokud tuto flexibilitu potřebujete, může mít smysl provést kanál, i když je třeba bez ohledu na výkon zvážit. Pokud tak neučiníte, je rozumné použít výkonnější přístup.




  1. Mongoose ukládá dokumenty, i když zkontroluji, zda dokument již existuje

  2. Přidejte data do dokumentů v Mongo DB pomocí PHP

  3. zastavit dynamické vytváření databází a kolekcí mongodb

  4. MongoDB Norm dotazuje vnořené objekty