‫- : Ainsi, la fonction
‫de filtrage que nous avons implémentée en ce moment fonctionne
‫déjà très bien, mais dans cette vidéo, nous voulons passer au
‫niveau supérieur en autorisant des requêtes encore plus complexes.
‫Donc, pour le moment, un utilisateur ne peut filtrer
‫les documents qu'en définissant une clé égale à une valeur, n'est-ce pas ?
‫Mais maintenant, nous voulons
‫également implémenter les opérateurs supérieur à, supérieur
‫ou égal à, inférieur à et inférieur ou égal à.
‫Donc, au lieu d'avoir
‫simplement l'égalité, nous voulons réellement pouvoir, par exemple, dire
‫une durée supérieure ou égale à cinq,
‫et pas seulement égale, d'accord ?
‫Et donc cela rend tout un peu plus complexe.
‫Maintenant, avant d'écrire du code, je vais
‫faire l'exercice d'écrire la requête à quoi
‫elle devrait ressembler dans MongoDB.
‫Alors, à quoi ressemblerait réellement l'objet filtre ?
‫Et écrivons-le ici comme un commentaire, et
‫encore, juste comme un exercice.
‫Donc l'objet ressemblerait un peu à
‫ceci, donc difficulté, commencez par celui-là, réglé sur facile,
‫puis durée; et souvenez-vous maintenant que lorsque nous
‫voulons utiliser un opérateur, nous devons démarrer un autre objet.
‫Et puis pour l'opérateur supérieur ou égal à nous
‫l'utilisons comme ceci, à cinq, n'est-ce pas, tu te souviens de ça ?
‫C'est ainsi que nous écririons manuellement l'objet
‫de filtre pour la requête que nous venons de spécifier.
‫Revenons maintenant à Postman pour que
‫je puisse vous montrer une manière très standard
‫d'écrire une chaîne de requête comprenant ces opérateurs.
‫Et nous le faisons comme ceci, donc avant le
‫signe égal, nous ouvrons les crochets,
‫puis ici nous écrivons l'opérateur, donc dans
‫ce cas supérieur ou égal, et c'est tout.
‫Et donc fondamentalement comme ça, nous ajoutons une troisième partie
‫à la paire clé-valeur, nous avons donc
‫la clé, la valeur, et maintenant aussi l'opérateur.
‫Et nous utilisons à nouveau ces
‫crochets afin de spécifier l'opérateur.
‫Encore une fois, c'est une
‫méthode standard et
‫allons maintenant de l'avant et examinons la chaîne de requête
‫qu'Express nous donne et comme
‫avant, enregistrons en fait une requête
‫reg dot sur la console, enregistrons une requête reg dot, tout droit.
‫Et donc regardons à quoi ressemblera notre objet
‫de requête lorsque nous spécifions
‫la chaîne de requête comme ceci.
‫Très bien, maintenant la première chose que vous remarquez
‫est que nous obtenons une erreur
‫ici, mais ne vous inquiétez pas pour le moment.
‫Donc ce qui m'intéresse ici, c'est cet objet, et donc laissez-moi aller
‫de l'avant et le copier ici.
‫D'accord, alors qu'est-ce que vous remarquez ici ?
‫Eh bien, ce que nous voyons ici, c'est que
‫l'objet de requête semble presque identique à
‫l'objet de filtre que nous avons écrit manuellement, la
‫seule différence est que dans celui-ci, nous avons le signe de l'opérateur MongoDB ici.
‫C'est donc vraiment la seule
‫chose qui manque ici devant ce nom d'opérateur.
‫D'accord, et donc la solution
‫pour cela est de remplacer essentiellement tous les
‫opérateurs comme celui-ci par leurs opérateurs
‫MongoDB correspondants, donc en gros, en ajoutant ce signe dollar ici, d'accord.
‫Implémentons maintenant cela, et en fait nous
‫le faisons quelque part ici, ajoutons en
‫fait quelques commentaires supplémentaires ici.
‫Donc le filtrage que nous avons fait dans la dernière
‫leçon, maintenant ici, ajoutons un filtrage avancé, et c'est
‫donc le code que nous allons écrire maintenant.
‫Maintenant, mettons ce code ici tout en haut, d'accord.
‫Ensuite, nous n'avons pas vraiment besoin de ce code ici, mais
‫je veux toujours le garder
‫ici, alors mettons-le juste ici à la fin.
‫Et puis juste ce code ici comme référence juste pour s'assurer
‫que nous savons ce que nous faisons ici.
‫Très bien, et maintenant que nous savons ce
‫que nous devons faire ici, il
‫ne s'agit en fait que d'un simple problème Javascript.
‫Et la façon dont je le
‫résous est la suivante, donc je vais d'abord convertir l'objet en une
‫chaîne de sorte que la chaîne de requête soit égale à JSON dot stringify de l'objet de requête,
‫et donc maintenant je peux utiliser cette chaîne de requête pour
‫utiliser la fonction de remplacement dessus .
‫Très bien, et donc ce que je
‫veux remplacer maintenant, c'est le gte avec le signe dollar gte,
‫puis aussi un autre opérateur.
‫Ainsi, ceux que
‫nous voulons remplacer sont supérieurs ou égaux,
‫supérieurs, inférieurs ou égaux et inférieurs à, et nous pouvons
‫le faire de plusieurs manières, mais
‫je vais utiliser une expression régulière.
‫Et pour moi personnellement, les expressions régulières
‫sont l'un des concepts les plus difficiles en
‫Javascript et en général en programmation.
‫Donc, généralement, lorsque j'ai besoin de
‫faire quelque chose comme ça, je vais simplement sur Stack Overflow
‫ou simplement sur Google pour trouver la bonne solution
‫au problème que j'essaie de résoudre, d'accord.
‫Et donc ce que nous
‫voulons faire maintenant ici est de faire correspondre l'un de ces quatre
‫mots, puis de le remplacer par les mêmes
‫mots mais avec le signe dollar devant.
‫Et donc l'expression
‫régulière pour trouver l'un de ces quatre mots va comme
‫ceci; donc nous ouvrons ces parenthèses puis nous écrivons les
‫opérateurs, donc gte ou gt ou lte ou lt.
‫Et puis nous devons également ajouter ce \b avant et après, et c'est parce que
‫nous voulons seulement faire correspondre ces mots exacts.
‫Imaginez donc qu'il y ait un mot qui contient le mot,
‫alors nous ne voulons bien sûr pas faire
‫correspondre ce que nous voulons seulement faire correspondre s'il s'agit de ce
‫mot exact, sans aucune autre chaîne autour de lui.
‫Et donc cette expression régulière que j'ai ici
‫s'occupera de cela, et en fait,
‫il manque une pièce et c'est ce drapeau g ici, ce
‫qui signifie que cela se produira plusieurs fois.
‫Donc, si nous avons deux ou trois
‫opérateurs ou même tous, alors il les remplacera tous.
‫Et sans ce g ici, il
‫ne remplacerait que la première occurrence, donc celle-ci est très importante.
‫Maintenant, par quoi voulons-nous réellement le remplacer?
‫Eh bien, la méthode replace
‫accepte en fait un rappel qui est très puissant, et
‫ce rappel a comme premier argument,
‫le mot correspondant ou la chaîne correspondante.
‫Nous pouvons donc passer une correspondance dans cette fonction de rappel
‫et ce que nous retournons de ce rappel est
‫la nouvelle chaîne qui remplacera l'ancienne, d'accord ?
‫Faisons donc une chaîne de modèle ici,
‫et nous voulons donc
‫remplacer la correspondance par une correspondance de signe dollar, d'accord, c'est donc ici la partie
‫de la syntaxe de la chaîne de modèle.
‫Voici donc ce match, et ensuite nous voulons
‫mettre le signe dollar devant cela.
‫Et maintenant, juste pour être
‫sûr, enregistrons-le dans la console et voulons réellement récupérer
‫l'objet, donc JSON n'analyse pas la chaîne de requête.
‫Très bien, permettez-moi d'aller de l'avant et d'éclaircir ceci ici afin que
‫vous puissiez voir un peu mieux les résultats.
‫Encore une fois, nous obtenons
‫cette erreur ici et c'est bien sûr parce que
‫MongoDB ne peut pas vraiment utiliser la chaîne
‫de requête ou l'objet de requête comme nous l'avons actuellement.
‫Et ici, nous avons les deux
‫résultats et vous voyez en fait que notre résultat
‫est exactement le même qu'avant et donc
‫quelque chose ici ne fonctionne clairement pas.
‫Essayons donc de comprendre ce que c'est.
‫Et ici, l'expression régulière a l'air bien, tout semble bien
‫ici, ah, mais d'accord, le problème est que
‫je la remplace dans la chaîne mais que je ne
‫la sauvegarde nulle part.
‫Et donc en fait, nous voulons l'enregistrer dans la chaîne de requête.
‫Alors changeons cela ici
‫en let, afin qu'il puisse ensuite
‫muter les données et disons, chaîne de requête, oh désolé.
‫Ainsi, la chaîne de requête est égale à la chaîne de requête
‫remplacée, comme avant, donc ce que j'oubliais, c'est simplement de sauvegarder
‫le résultat ici dans la variable.
‫Essayons à nouveau, et maintenant ça marche.
‫Alors maintenant, nous avons
‫le signe dollar devant l'opérateur, super.
‫Bon, ça marche, débarrassons-nous de ces commentaires ici et maintenant enfin, tout
‫ce que nous avons à faire est de
‫ne pas utiliser ici l'objet de requête mais simplement de l'utiliser.
‫Donc JSON. analyser la chaîne de
‫requête, et bien sûr, si vous n'avez aucun opérateur dans la
‫chaîne de requête, tout fonctionnera très bien.
‫Il n'y trouvera tout simplement aucun de ces quatre opérateurs mais ce n'est pas
‫un problème, il ne remplacera tout
‫simplement rien.
‫Et aussi allons-y et essayons cela et cela prend un
‫peu de temps, mais en fait,
‫il est revenu avec trois
‫résultats, et vérifions donc maintenant s'ils sont réellement corrects.
‫Donc la durée doit être supérieure ou égale
‫à cinq, et celle-ci ici est une durée
‫de cinq, cela a une durée
‫de neuf, qui est supérieure ou
‫égale à cinq, et donc ça marche réellement, la difficulté est toujours
‫facile et alors quoi cela signifie que le code que nous
‫venons d'implémenter fonctionne très bien.
‫Parfait, maintenant, juste pour le plaisir, ajoutons
‫un autre paramètre là-haut, alors filtrons
‫également le prix maintenant.
‫Donc celui-ci en a presque 2000, puis 1100, celui-ci en a 300.
‫Filtrez donc maintenant les prix inférieurs à mille, ou
‫inférieurs à mille cinq cents.
‫Et le prix, et maintenant encore nos brackets,
‫et nous utilisons moins de 1500, et d'accord, envoyez ça.
‫Et qu'obtenons-nous ici, oh, maintenant nous n'avons que deux résultats.
‫Et en effet, les prix ici, 397, et ici 1197, et
‫donc celui d'avant 2000 a maintenant disparu.
‫Nous avons donc filtré celui-ci également
‫en utilisant à nouveau l'opérateur que nous venons d'implémenter.
‫Et nous pourrions maintenant filtrer toutes
‫sortes de choses ici, mais vous comprenez, et donc oui, nous
‫avons mis en œuvre notre type de filtrage
‫avancé ici à ce stade, qui accepte même maintenant ces quatre opérateurs.
‫Maintenant, dans le monde réel, nous
‫devrions alors rédiger de la documentation, essentiellement pour
‫permettre à l'utilisateur de savoir quels types d'opérations
‫il peut effectuer sur notre API, n'est-ce pas ?
‫Donc encore une fois, idéalement, nous documenterions complètement notre API, en spécifiant
‫quelles requêtes peuvent être faites en utilisant quelles méthodes
‫HTTP, et puis aussi quel type de filtrage
‫ou de tri, ou toutes ces
‫fonctionnalités, lesquelles d'entre elles sont disponibles et comment elles
‫peuvent l'utiliser, n'est-ce pas ?
‫Maintenant, dans notre cas, nous ne le ferons bien
‫sûr pas, mais encore une fois, n'oubliez pas
‫que si vous implémentez vraiment une API qui va être utilisée
‫par quelqu'un d'autre, alors vous devez vraiment faire ce genre de documentation.
‫Mais de toute façon, passons maintenant à notre prochaine vidéo
‫et implémentons une fonctionnalité de tri.