‫Instructeur : Utilisons maintenant un processus
‫appelé populate afin d'avoir accès aux guides touristiques
‫référencés chaque fois que nous interrogeons pour une certaine visite.
‫Donc, dans la dernière vidéo, nous avons
‫créé une référence à l'utilisateur, ici dans ce champ de guides,
‫directement dans notre modèle de tournée, non ?
‫Et maintenant, nous allons utiliser populate afin
‫de remplacer essentiellement les champs que nous avons
‫référencés par les données associées réelles.
‫Et le résultat de cela donnera
‫l'impression que les données ont toujours été intégrées,
‫alors qu'en fait, comme nous le savons,
‫elles se trouvent dans une collection complètement différente, d'accord ?
‫Désormais, le processus de remplissage se produit toujours dans une requête.
‫Et donc passons maintenant à notre contrôleur
‫de tournée, puis directement à la fonction où nous obtenons une seule tournée.
‫Alors ici, en tournée.
‫Et voici notre requête, n'est-ce pas ?
‫C'est donc ici que nous construisons notre requête.
‫Et maintenant, tout ce que nous avons à faire est
‫d'ajouter la population à la requête.
‫Alors remplissez, puis le nom du champ que
‫nous voulons réellement remplir
‫et qui s'appelle guides, d'accord ?
‫Et si vous y réfléchissez, ce nom a un sens.
‫Nous voulons donc remplir le
‫champ appelé guides dans notre modèle.
‫Bon, encore une fois, ce champ guides ne
‫contient que la référence.
‫et avec popup, nous allons ensuite le remplir
‫avec les données réelles, d'accord et encore une fois uniquement dans la requête
‫et non dans la base de données réelle, d'accord ?
‫Donc, c'est vraiment tout ce que nous devons faire.
‫Et regardons maintenant le résultat, d'accord ?
‫Donc, c'est l'identifiant de la tournée et rappelons-nous que c'est à quoi
‫ressemblent les guides, en ce moment, d'accord ?
‫Mais si nous obtenons maintenant une visite et avec
‫cet identifiant, alors attendons-le
‫maintenant, et en effet, voici les données sur les guides.
‫D'accord, ces deux éléments que nous avions déjà dans
‫les guides ont maintenant été remplis avec les données réelles.
‫Et si nous examinons maintenant toutes les
‫tournées, débarrassons-nous en fait de certains de ces éléments ici.
‫Nous avons trop de choses ouvertes ici.
‫Donc si nous obtenons maintenant toutes les
‫tournées, d'accord, alors faisons défiler jusqu'à
‫la fin où
‫la nouvelle devrait être et apparemment c'est maintenant
‫bien, oh c'est parce que j'ai
‫ce filtre ici, débarrassons-nous de ça, et maintenant j'ai mon 10 résultats et en fait
‫c'est juste ici, donc la nouvelle tournée d'essai.
‫Et maintenant, vous voyez qu'ici, il s'agit de nous
‫montrer uniquement les valeurs qui sont réellement dans la base de données.
‫Alors confirmons également cela ici dans Compass.
‫Et donc en effet, comme vous le voyez, nous n'avons
‫toujours pas les données réelles ici dans la base de données, mais seulement vraiment les identifiants.
‫D'accord, et c'est seulement cette étape de remplissage qui remplacera
‫ensuite ces identifiants par les données réelles, d'accord ?
‫Et donc ici, cela ne se
‫passe pas bien parce que nous n'avons pas
‫implémenté la population dans le gestionnaire d'itinéraire get all tours.
‫Bon, maintenant laissez-moi vous montrer une petite astuce que nous pouvons
‫faire avec la fonction de remplissage.
‫Ce qui consiste en fait à sélectionner simplement certains champs.
‫Ainsi, par exemple, nous ne sommes pas intéressés par cette propriété v ici et pas
‫non plus par passwordChangedAt à droite, ce n'est donc
‫pas le genre
‫de données que nous voulons sur nos guides touristiques.
‫Et donc ici dans popup, nous pouvons effectivement le spécifier.
‫Donc, au lieu de simplement passer
‫la chaîne, nous pouvons créer un
‫objet d'options
‫et ensuite nous pouvons dire, le chemin
‫est des guides, donc fondamentalement, le nom du champ que
‫nous voulons remplacer,
‫puis, comme d'habitude, nous pouvons utiliser select , et
‫puis moins, celui-ci ici et aussi, l'autre, donc passwordChangedAt, c'est
‫juste plus facile à copier, d'accord, alors
‫changeons-le ici, et renvoyons-le.
‫Et ce n'est bien sûr pas le bon itinéraire, donc
‫désolé pour ça, je pense que je l'ai aussi utilisé avant en fait
‫où je voulais vraiment vous montrer
‫celui-ci, n'est-ce pas, et tellement désolé pour ça, mais toujours ce dont
‫nous voulons nous débarrasser d'ici est ce V et
‫ce mot de passeChangedAt.
‫Et donc nous l'avons
‫déjà fait, donc si nous l'envoyons maintenant,
‫alors bien sûr nous n'obtiendrons que les données qui nous intéressent.
‫Très bien, donc cette fonction de remplissage est
‫un outil absolument fondamental pour travailler avec
‫des données dans Mongoose.
‫Et surtout, bien sûr,
‫lorsqu'il existe des relations entre les
‫données, d'accord, vous devez donc toujours savoir exactement comment et
‫quand les utiliser pour vos propres applications.
‫Et pour s'entrainer à cela, nous l'utiliserons bien
‫sûr de nombreuses fois tout au long de cette section.
‫Maintenant, une chose que je veux que vous
‫gardiez à l'esprit, c'est que dans les coulisses, l'utilisation
‫de populate créera toujours une
‫nouvelle requête, et cela pourrait donc affecter vos performances.
‫D'accord, bien sûr, si vous ne le faites
‫qu'une ou deux fois et dans une sorte de petite application, alors ce
‫petit coup sur les performances n'est pas grave du tout.
‫Mais dans une application énorme, avec des
‫tonnes de population partout, cela
‫pourrait effectivement avoir un effet, d'accord ?
‫Alors gardez cela à l'esprit.
‫D'accord, et c'est vraiment logique, car comment Mongoose
‫pourrait-il autrement obtenir des données sur les visites
‫et les utilisateurs en même temps.
‫Il doit créer une nouvelle requête essentiellement
‫pour pouvoir créer cette connexion.
‫D'accord et maintenant juste pour finir, souvenons-nous de
‫ce que je vous ai
‫montré que cela n'a pas fonctionné en fait lorsque nous avons eu toutes les tournées.
‫Alors, rappelez-vous que dans cette situation, nous obtenons toujours
‫simplement les identifiants des guides touristiques et non
‫les données utilisateur référencées.
‫D'accord, et donc une solution serait essentiellement de
‫copier ce code ici, donc cette fonction de remplissage, également ici
‫dans ce gestionnaire de route, mais bien
‫sûr, le code dupliqué n'est jamais une bonne idée.
‫Et j'espère que
‫vous connaissez déjà à ce stade une meilleure façon de le faire.
‫Et la réponse à cela est le middleware de requête.
‫D'accord, allons-y rapidement et passons à notre modèle, et je
‫copie ce code
‫ici maintenant et donc, ouais, faisons-le ici.
‫Donc,
‫un pre et ensuite je le ferai comme avant
‫avec une expression régulière, qui fonctionnera ensuite pour
‫tout ce qui commence par find.
‫Donc, juste comme
‫ça, d'accord, et bien sûr, nous le faisons dans un middleware de requête, eh bien
‫parce que c'est le genre de middleware qui
‫va s'exécuter à chaque fois qu'il y a une requête.
‫Bon, mettons simplement tous ces pré middlewares ensemble,
‫puis après cela, ayons le post.
‫Très bien, permettez-moi de copier le code que nous avions auparavant et
‫ajoutons-le maintenant, car rappelez-vous que dans
‫le middleware de requête,
‫cela pointe toujours vers la requête actuelle.
‫Et donc maintenant, en gros, toutes
‫les requêtes rempliront automatiquement le champ
‫guides avec l'utilisateur référencé.
‫D'accord, et nous pouvons maintenant nous en débarrasser ici.
‫Et oui, c'est en fait ça.
‫Alors maintenant, nous le faisons ici, au
‫lieu de le faire à deux endroits, dans le contrôleur.
‫Et c'est donc une petite astuce sympa au cas où
‫vous voudriez toujours remplir tous vos documents.
‫Alors, testons-le.
‫Tout d'abord, si cela fonctionne toujours ici.
‫Et en effet, c'est le cas, nous obtenons donc nos deux utilisateurs.
‫Et puis testons-le ici là où cela ne fonctionnait pas
‫auparavant et maintenant c'est le cas, alors voici le résultat de cela.
‫Et maintenant, juste pour nous assurer que
‫cela fonctionne réellement, mettons-le également à jour et ajoutons essentiellement un autre guide touristique.
‫Donc, copions l'identifiant de
‫la
‫visite ici, puis
‫mettons à jour la visite.
‫autre utilisateur.
‫Donc, c'est celui-ci ici, qui n'est en fait pas
‫un guide ni même un administrateur, mais c'est juste pour
‫le test, alors saisissons
‫cet identifiant, puis allons-y et mettons-le ici.
‫Alors, mettons-le à jour, cela fonctionne toujours, et maintenant en
‫fait, même dans cette
‫sortie, nous avons déjà les données remplies.
‫D'accord, parce que dans notre expression régulière, rappelez-vous
‫que nous avons utilisé find.
‫Et donc, cette mise à jour ici est implémentée à l'aide de find
‫by id et update, et elle commence donc également
‫par find et donc le middleware de requête que nous étions
‫auparavant s'applique également à cette fonction.
‫D'accord, c'est ainsi que fonctionne le remplissage.
‫Bon, encore une fois, un outil extrêmement important dans
‫votre boîte à outils Mongoose, d'accord.
‫Et juste pour être
‫sûr, prenons 15 secondes ici pour récapituler.
‫Il s'agit donc d'un processus en deux étapes.
‫Tout d'abord, vous créez une référence à un autre modèle.
‫Et ainsi, avec cela, vous créez efficacement
‫la relation entre ces deux ensembles de données.
‫Ensuite, dans la deuxième étape, vous remplissez
‫ce champ que vous venez de
‫spécifier auparavant, ainsi les guides utilisent la méthode de remplissage.
‫Très bien, très simple, très direct, tout ce dont vous avez
‫besoin est de vraiment comprendre
‫la logique derrière tout cela et
‫vous êtes ensuite prêt à commencer à l'utiliser.