MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Prestazioni terribilmente degradate con altre condizioni di join in $lookup (usando la pipeline)

La seconda versione aggiunge un'esecuzione della pipeline di aggregazione per ogni documento nella raccolta unita .

La documentazione dice:

La pipeline viene eseguita per ogni documento nella raccolta, non per ogni documento abbinato.

A seconda di quanto è grande la raccolta (sia il numero di documenti che le dimensioni del documento), questo potrebbe arrivare in una discreta quantità di tempo.

Ha senso:anche per tutti i documenti aggiuntivi dovuti alla rimozione del limite deve essere eseguita la pipeline di aggregazione.

È possibile che l'esecuzione per documento della pipeline di aggregazione non sia ottimizzata come potrebbe essere. Ad esempio, se la pipeline viene impostata e demolita per ogni documento, potrebbe facilmente esserci un sovraccarico in quello rispetto alle condizioni di $match.

L'esecuzione di una pipeline di aggregazione per documento unito offre ulteriore flessibilità. Se hai bisogno di questa flessibilità, può avere senso eseguire la pipeline, anche se le prestazioni devono essere considerate a prescindere. In caso contrario, è opportuno utilizzare un approccio più performante.