‫Instructeur : Jusqu'à
‫présent dans cette section, nous avons
‫parlé des modèles Mongoose, des opérations
‫CRUD avec Mongoose, nous avons fait beaucoup de
‫requêtes et nous avons appris le pipeline d'agrégation, mais
‫maintenant pour les deux prochaines vidéos, revenons
‫en fait à nos données modéliser et apprendre quelques fonctionnalités super
‫utiles que Mongoose nous offre afin de modéliser nos données.
‫Et le premier dont nous allons
‫parler sont les propriétés virtuelles.
‫Et donc ouvrons notre modèle de tournée ici.
‫D'accord, maintenant les propriétés virtuelles sont essentiellement des champs que nous
‫pouvons définir sur notre schéma
‫mais qui ne seront pas persistants.
‫Ils ne seront donc pas enregistrés dans la base de données
‫afin de nous faire gagner de la place.
‫Et la plupart du
‫temps, bien sûr, nous voulons vraiment enregistrer nos données dans la
‫base de données, mais les propriétés virtuelles ont beaucoup
‫de sens pour les champs qui peuvent être dérivés les uns des autres.
‫Par exemple une conversion de miles en kilomètres, cela n'a pas
‫de sens de stocker ces deux
‫champs dans une base de données si on
‫peut facilement convertir l'un en l'autre, non ?
‫Bon, définissons maintenant une propriété virtuelle qui contient la
‫durée de la visite en semaines.
‫Et c'est donc un champ que
‫nous pouvons très facilement convertir à partir de la durée
‫que nous avons déjà en jours, n'est-ce pas ?
‫Et voici donc comment cela fonctionne.
‫Nous définissons ces propriétés virtuelles sur le schéma de
‫tournée, et ainsi nous disons, tourSchema. virtual puis le nom de la
‫propriété virtuelle.
‫Appelons cela des semaines de durée,
‫puis là, nous devons définir la méthode get.
‫Et c'est juste parce que cette propriété virtuelle ici
‫sera essentiellement créée chaque fois
‫que nous extrairons des données de la base de données.
‫Et donc cette fonction get ici est appelée un getter.
‫Maintenant, ici, nous passons une fonction, et en
‫fait cette fonction
‫de rappel va être une vraie fonction, donc pas une fonction de
‫flèche, et je vais vous expliquer pourquoi dans une seconde.
‫Maintenant, comment définissons-nous fondamentalement la
‫propriété virtuelle ?
‫Bon c'est très simple, tout ce qu'on a à
‫dire c'est qu'on veut rendre ça, . durée dans ce cas, divisée
‫par sept.
‫Donc c'est comme ça qu'on calcule la durée en semaines, donc la
‫durée en jours divisée par sept car il
‫y a sept jours dans la semaine, et
‫c'est donc la durée en semaines.
‫Par exemple, si une tournée a sept jours,
‫elle durera bien sûr une semaine.
‫Maintenant, j'ai utilisé cette fonction régulière ici, car
‫rappelez-vous qu'une fonction de flèche n'obtient pas son
‫propre mot-clé de disque.
‫Ici, nous avons en fait besoin du
‫mot-clé disk car le mot-clé disk
‫dans ce cas va pointer vers le document actuel.
‫Et donc généralement, lorsque nous
‫voulons l'utiliser, nous devons toujours utiliser une fonction normale.
‫Donc vraiment partout dans Mongoose, je
‫vais toujours utiliser ces fonctions régulières auxquelles
‫nous sommes habitués.
‫Alors faites une sauvegarde ici, et c'est tout.
‫C'est ainsi que nous définissons les semaines
‫de durée, qui ne seront pas persistantes dans la base
‫de données, mais elles ne seront là que dès que nous aurons les données.
‫Maintenant, pour le moment, il ne sera pas
‫encore là, car il manque une pièce ici,
‫alors laissez-moi commencer par vous le montrer.
‫Donc, si nous essayons d'obtenir toutes
‫les visites, vous verrez que les semaines de
‫durée sont introuvables ici.
‫Et c'est parce que nous devons définir explicitement dans
‫notre schéma que nous voulons les propriétés virtuelles dans
‫notre sortie.
‫Et rappelez-vous comment j'ai dit cela dans cette mangouste. schéma, nous pouvons transmettre non seulement
‫l'objet avec la définition
‫de schéma elle-même, mais également
‫un objet pour les options de schéma.
‫Et donc ajoutons cela ici à
‫la fin, donc ce premier objet ici est la définition du schéma,
‫et maintenant un deuxième objet pour les options.
‫Et ce que nous devons spécifier ici, ce sont les deux propriétés
‫JSON ici, et ce que nous disons alors, c'est que
‫chaque fois que les données sont réellement sorties en tant que JSON, nous
‫voulons que les virtuals soient vrais.
‫Donc, fondamentalement, les virtuels doivent faire partie de la sortie.
‫Et maintenant, je duplique cela parce que
‫nous voulons aussi dire d'objecter.
‫Donc, fondamentalement, lorsque les données sont sorties
‫en tant qu'objet.
‫Et donc si nous revenons maintenant ici, nous devrions alors être
‫en mesure de voir la durée des semaines.
‫Attendons-le, et en effet, le voici.
‫C'est donc cinq jours, et c'est donc 0. 71 semaines.
‫Ici, nous avons sept jours, et donc une semaine.
‫D'accord, donc ça marche vraiment, super.
‫Maintenant, une chose que nous devons
‫garder à l'esprit est que nous ne pouvons pas utiliser cette
‫propriété virtuelle ici dans une requête, car techniquement, elles ne font
‫pas partie de la base de données.
‫On ne peut
‫donc pas dire, par exemple, tournée. trouver où la durée semaines est égale à un.
‫Cela ne fonctionnera pas, encore une fois parce que cette propriété
‫ne fait pas réellement partie de la base de données.
‫Bien sûr, nous aurions également pu effectuer cette conversion
‫à chaque fois que nous avons interrogé les données, par
‫exemple, comme dans un contrôleur, mais ce
‫ne serait pas la meilleure pratique simplement parce que nous voulons
‫essayer de garder la logique métier et la
‫logique d'application autant séparées que possible, tu te souviens?
‫C'était donc toute cette discussion sur les gros modèles
‫et les contrôleurs légers dont nous avons parlé précédemment et qui dit
‫que nous devrions avoir des
‫modèles avec autant de logique métier que nous pouvons leur
‫décharger et des contrôleurs légers avec
‫le moins de logique métier possible.
‫Et donc des propriétés virtuelles comme celle-ci sont en fait un
‫bon exemple de la façon dont nous pouvons
‫réaliser ce type d'architecture.
‫Donc, connaître la durée en semaines est
‫une logique métier car cela a à voir avec
‫l'entreprise elle-même, pas avec des choses comme des demandes ou
‫des réponses, et donc nous faisons le calcul directement
‫dans le modèle auquel il appartient et
‫non dans le contrôleur.