sql >> Databasteknik >  >> NoSQL >> MongoDB

Fruktansvärt försämrad prestanda med andra kopplingsvillkor i $lookup (med pipeline)

Den andra versionen lägger till en aggregeringspipelineexekvering för varje dokument i den förenade samlingen .

Dokumentationen säger:

Pipelinen exekveras för varje dokument i samlingen, inte för varje matchat dokument.

Beroende på hur stor samlingen är (både antal dokument och dokumentstorlek) kan detta ta en anständig tid.

Förnuftigt - alla ytterligare dokument på grund av borttagandet av gränsen måste också ha aggregeringspipelinen exekverad för dem.

Det är möjligt att exekvering av aggregeringspipeline per dokument inte är så optimerad som den skulle kunna vara. Till exempel, om pipelinen ställs in och rivs ner för varje dokument, kan det lätt finnas mer overhead i det än i $match-villkoren.

Att köra en aggregeringspipeline per sammanfogat dokument ger ytterligare flexibilitet. Om du behöver denna flexibilitet kan det vara vettigt att köra pipeline, även om prestanda måste beaktas oavsett. Om du inte gör det är det förnuftigt att använda ett mer presterande tillvägagångssätt.




  1. Ändra och spela om MongoDB oplog

  2. Hur ansluter jag Django Rest-api med MongoDB?

  3. Skicka typinformation till MongoDB så att den kan deserialisera gränssnittstyper ordentligt?

  4. MongoDB $vecka