MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

L'exécution de la requête Mongodb prend trop de temps

Il y a beaucoup de choses à faire pour optimiser votre requête. Ce que j'essaierais :

  • Comme Anthony Winzlet l'a dit dans les commentaires, utilisez autant que possible l'étape $match comme première étape. De cette façon, vous pouvez réduire le nombre de documents passés aux étapes suivantes et utiliser des index.

  • En supposant que vous utilisez au moins la version 3.6 de mongo, modifiez vos étapes de recherche à l'aide de la syntaxe 'let/pipeline' (voir ici ). De cette façon, vous pouvez intégrer vos 'filtres externes' ( "customer_info.status":{$ne:9}, "model_info.status":{$ne:9} ) dans une étape $match de votre pipeline de recherches. Avec des index sur les bons champs/collections, vous gagnerez du temps/de la mémoire dans vos étapes de $lookup.

  • Faites vos étapes de déroulement le plus tard possible, pour limiter le nombre de documents passés aux étapes suivantes.

Il est important de comprendre comment fonctionne le pipeline d'agrégation :chaque étape reçoit des données, fait son travail et transmet les données à l'étape suivante. Ainsi, moins de données sont transmises au pipeline, plus votre requête sera rapide.