‫-: Quindi la funzione
‫di filtro che abbiamo implementato in questo momento funziona
‫già alla grande, ma in questo video vogliamo portarla al
‫livello successivo consentendo alcune query ancora più complesse.
‫Quindi in questo momento un utente può filtrare
‫i documenti solo impostando una chiave uguale a un valore, giusto?
‫Ma ora, in realtà vogliamo
‫implementare anche gli operatori maggiore di, maggiore
‫o uguale a, minore di e minore o uguale a.
‫Quindi, invece di essere
‫semplicemente uguale, vogliamo essere effettivamente in grado, ad esempio,
‫di dire la durata maggiore o uguale a
‫cinque, e non solo uguale, va bene?
‫E questo rende tutto un po' più complesso.
‫Ora, prima di scrivere qualsiasi codice, farò
‫effettivamente l'esercizio di scrivere la query
‫come dovrebbe apparire in MongoDB.
‫Quindi come sarebbe effettivamente l'oggetto filtro?
‫E scriviamolo qui come commento, e
‫ancora, solo come esercizio.
‫Quindi l'oggetto assomiglierebbe un po' a
‫questo, quindi difficoltà, inizia con quello, impostato su facile
‫e poi durata; e ora ricorda che
‫quando vogliamo usare un operatore, dobbiamo iniziare un altro oggetto.
‫E poi per l'operatore maggiore o uguale
‫a lo usiamo in questo modo, a cinque, giusto, ricordi?
‫Quindi è così che scriveremmo manualmente
‫l'oggetto filtro per la query che abbiamo appena specificato.
‫Ora torniamo effettivamente a Postman in modo
‫che io possa mostrarti un modo molto standard di
‫scrivere una stringa di query che include questi operatori.
‫E lo facciamo in questo modo, quindi prima del
‫segno di uguale apriamo le parentesi
‫e poi qui dentro scriviamo l'operatore, quindi
‫in questo caso maggiore o uguale, e basta.
‫E quindi sostanzialmente in questo modo, aggiungiamo una terza
‫parte alla coppia chiave-valore, quindi abbiamo
‫la chiave, il valore e ora anche l'operatore.
‫E usiamo di nuovo queste
‫parentesi per specificare l'operatore.
‫Quindi di nuovo, questo è un
‫modo standard e
‫quindi ora andiamo avanti e diamo un'occhiata alla stringa di
‫query che Express ci fornisce
‫e quindi, proprio come prima, registriamo
‫una query reg dot sulla console, registriamo la query reg dot, tutto Giusto.
‫E quindi diamo un'occhiata a come apparirà il
‫nostro oggetto query quando specifichiamo
‫la stringa di query in questo modo.
‫Bene, ora la prima cosa che noti
‫è che riceviamo un
‫errore qui, ma per ora non preoccuparti.
‫Quindi quello che mi interessa qui, è questo oggetto, quindi
‫lasciami andare avanti e copiarlo qui.
‫Va bene, allora cosa noti qui?
‫Bene, quello che vediamo qui è che
‫l'oggetto query sembra quasi identico
‫all'oggetto filtro che abbiamo scritto manualmente, l'unica
‫differenza è che in questo abbiamo il segno dell'operatore MongoDB qui.
‫Quindi questa è davvero l'unica cosa
‫che manca qui davanti al nome di questo operatore.
‫Ok, quindi la soluzione
‫per questo è sostanzialmente sostituire tutti gli operatori
‫come questo con i loro operatori
‫MongoDB corrispondenti, quindi in pratica aggiungendo questo simbolo del dollaro qui, ok.
‫Quindi ora implementiamolo, e infatti lo
‫facciamo da qualche parte qui,
‫aggiungiamo altri commenti qui.
‫Quindi il filtraggio che abbiamo fatto nell'ultima lezione,
‫ora qui aggiungiamo alcuni filtri avanzati, e questo
‫è il codice che scriveremo ora.
‫Ora mettiamo questo codice qui in alto, va bene.
‫Quindi questo codice qui non ci serve davvero,
‫ma voglio comunque
‫tenerlo qui, quindi mettiamolo qui alla fine.
‫E poi solo questo codice qui come riferimento solo per
‫assicurarci di sapere cosa stiamo facendo qui.
‫Va bene, e ora che sappiamo cosa
‫dobbiamo fare qui, in realtà
‫è solo un semplice problema di Javascript.
‫E il modo in cui lo
‫sto risolvendo è questo, quindi prima convertirò l'oggetto in una stringa
‫in modo che la stringa di query sia uguale a JSON dot stringify dell'oggetto query, e quindi
‫ora posso usare quella stringa di query per usare la
‫funzione di sostituzione su di essa .
‫Va bene, quindi quello che voglio sostituire
‫ora è il gte con il simbolo del dollaro gte, e
‫poi anche qualche altro operatore.
‫Quindi quelli che
‫vogliamo sostituire sono maggiore o uguale, maggiore
‫di, minore o uguale e minore di, e ci sono
‫un paio di modi in cui
‫possiamo farlo, ma userò un'espressione regolare.
‫E per me personalmente, le espressioni regolari
‫sono uno dei concetti più difficili in
‫Javascript e in generale nella programmazione.
‫Quindi di solito quando ho bisogno
‫di fare qualcosa del genere, vado semplicemente su Stack Overflow o semplicemente
‫su Google per trovare la soluzione giusta per il
‫problema che sto cercando di risolvere, va bene.
‫E quindi quello che vogliamo
‫fare ora qui è sostanzialmente abbinare una di queste quattro parole e
‫poi sostituirla con le stesse parole ma
‫con il simbolo del dollaro davanti.
‫E così l'espressione
‫regolare per trovare una di queste quattro parole va
‫così; quindi apriamo queste parentesi e poi scriviamo gli operatori,
‫quindi gte o gt o lte o lt.
‫E poi dobbiamo anche aggiungere questo \b prima e dopo, e questo perché
‫vogliamo solo far corrispondere queste parole esatte.
‫Quindi immagina che ci sia una parola che ha
‫lt in essa, quindi ovviamente non vogliamo
‫corrispondere a ciò che vogliamo abbinare solo se è questa
‫parola esatta, senza altre stringhe attorno ad essa.
‫E quindi questa espressione regolare che ho qui
‫se ne occuperà, e in realtà
‫manca un pezzo e questo è questo flag g qui, il
‫che significa che in realtà accadrà più volte.
‫Quindi, se abbiamo due o tre
‫operatori o anche tutti, allora li sostituirà tutti.
‫E senza questa g qui,
‫sostituirebbe solo la prima occorrenza, quindi questa è molto importante.
‫Ora, con cosa vogliamo effettivamente sostituirlo?
‫Bene, il metodo di
‫sostituzione accetta effettivamente un callback che è molto potente e
‫questo callback ha come primo argomento,
‫la parola corrispondente o la stringa corrispondente.
‫Quindi possiamo passare la corrispondenza in quella funzione di callback
‫e ciò che restituiamo da questo callback è la
‫nuova stringa che sostituirà quella vecchia, ok?
‫Quindi facciamo una stringa modello qui, e
‫quindi vogliamo sostituire
‫la corrispondenza con la corrispondenza del simbolo del dollaro, ok, quindi questa è
‫qui la parte della sintassi della stringa modello.
‫Quindi questa è questa partita, e poi vogliamo mettere
‫il simbolo del dollaro davanti a quella.
‫E ora, solo per essere
‫sicuri, accediamo effettivamente alla console e richiediamo effettivamente l'oggetto,
‫quindi il punto JSON analizza la stringa di query.
‫Va bene, lasciami andare avanti e chiarire questo qui in modo che
‫tu possa vedere i risultati un po' meglio.
‫Quindi, di nuovo, otteniamo questo
‫errore qui e questo è ovviamente perché MongoDB
‫non può davvero usare la stringa di
‫query o l'oggetto query come lo abbiamo in questo momento.
‫E qui abbiamo i due
‫risultati e in realtà vedi che il nostro risultato
‫è esattamente lo stesso di prima e
‫quindi qualcosa qui chiaramente non funziona.
‫Quindi cerchiamo di capire di cosa si tratta.
‫E qui l'espressione regolare sembra a posto, tutto sembra a
‫posto qui, ah, ma va bene, il problema
‫è che la sto sostituendo nella stringa ma poi non la
‫salvo da nessuna parte.
‫E quindi in realtà vogliamo salvarlo nella stringa di query.
‫Quindi cambiamo questo qui in
‫un let, in modo che possa quindi
‫mutare i dati e quindi diciamo, stringa di query, oh scusa.
‫Quindi, la stringa di query è uguale alla stringa di query sostituita,
‫proprio come prima, quindi quello che stavo dimenticando è semplicemente salvare
‫effettivamente il risultato qui nella variabile.
‫Proviamo di nuovo, e ora funziona.
‫Quindi ora abbiamo il
‫simbolo del dollaro davanti all'operatore, fantastico.
‫Ok, quindi funziona, liberiamoci di questi commenti qui e ora finalmente,
‫tutto ciò che dobbiamo fare è in
‫realtà qui non usare l'oggetto query ma usare solo questo.
‫Quindi JSON. analizzare la stringa di
‫query e, naturalmente, se non si dispone di alcun operatore
‫nella stringa di query, tutto funzionerà correttamente.
‫Semplicemente non troverà nessuno di questi quattro operatori lì, ma non è
‫un problema, semplicemente non sostituirà
‫nulla.
‫Inoltre, andiamo avanti e proviamo questo e ci vuole un
‫po' di tempo, ma in
‫effetti è tornato con
‫tre risultati, quindi ora controlliamo se sono effettivamente corretti.
‫Quindi la durata dovrebbe essere maggiore o uguale
‫a cinque, e questa qui è la durata
‫di cinque, questa ha una durata
‫di nove, che è maggiore o
‫uguale a cinque, e quindi funziona davvero, la difficoltà è ancora
‫facile e quindi cosa significa che il codice che abbiamo
‫appena implementato funziona bene.
‫Perfetto, ora aggiungiamo solo per il gusto di
‫farlo un altro parametro lassù, quindi filtriamo
‫anche per il prezzo ora.
‫Quindi questo ne ha quasi 2000, poi 1100, questo ne ha 300.
‫Quindi ora filtriamo per prezzi inferiori a mille
‫o inferiori a millecinquecento.
‫E il prezzo, e ora di nuovo le nostre
‫parentesi, e usiamo meno di 1500, e va bene, invialo.
‫E cosa otteniamo qui, oh, ora abbiamo solo due risultati.
‫E in effetti, i prezzi qui, 397, e qui 1197, e quindi
‫quello prima era 2000, ora è sparito.
‫Quindi abbiamo filtrato anche quello
‫usando di nuovo l'operatore che abbiamo appena implementato.
‫E ora potremmo filtrare per
‫tutti i tipi di cose qui, ma hai capito, e quindi
‫sì, abbiamo implementato il nostro tipo di filtro
‫avanzato qui a questo punto, che ora accetta anche questi quattro operatori.
‫Ora, nel mondo reale,
‫dovremmo scrivere della documentazione, fondamentalmente per consentire
‫all'utente di sapere quali tipi di
‫operazioni possono eseguire sulla nostra API, giusto?
‫Quindi, di nuovo, idealmente dovremmo documentare completamente la nostra API,
‫specificando quali richieste possono essere fatte usando quali
‫metodi htp, e poi anche che tipo
‫di filtraggio o ordinamento, o tutte
‫queste funzionalità, quali di esse sono disponibili e come
‫possono usarle, giusto ?
‫Ora, nel nostro caso ovviamente non lo faremo,
‫ma ancora una volta, non dimenticare che
‫se stai davvero implementando un'API che verrà utilizzata da
‫qualcun altro, allora devi davvero fare questo tipo di documentazione.
‫Ma comunque, passiamo ora al nostro prossimo video
‫e implementiamo una funzionalità di ordinamento.