‫-: Entonces, la función de
‫filtro que hemos implementado en este momento ya funciona
‫muy bien, pero en este video queremos llevarlo al siguiente
‫nivel al permitir algunas consultas aún más complejas.
‫Entonces, en este momento, un usuario solo puede
‫filtrar los documentos estableciendo una clave igual a un valor, ¿verdad?
‫Pero ahora, en realidad, también
‫queremos implementar los operadores mayor que, mayor
‫o igual que, menor que y menor o igual que.
‫Entonces, en lugar de
‫simplemente tener igual, queremos poder, por ejemplo, decir
‫una duración mayor o igual a cinco,
‫y no solo igual, ¿de acuerdo?
‫Y eso hace que todo sea un poco más complejo.
‫Ahora, antes de escribir cualquier código, haré
‫el ejercicio de escribir la consulta sobre
‫cómo debería verse en MongoDB.
‫Entonces, ¿cómo se vería realmente el objeto de filtro?
‫Y escribámoslo aquí como un comentario, y
‫nuevamente, solo como un ejercicio.
‫Entonces, el objeto se vería un poco
‫así, así que la dificultad, comenzaría con ese, se establecería en
‫fácil y luego en la duración; y ahora
‫recuerde que cuando queremos usar un operador, necesitamos iniciar otro objeto.
‫Y luego para el operador mayor o
‫igual que lo usamos así, a cinco, ¿verdad, recuerdas eso?
‫Así es como escribiríamos manualmente el
‫objeto de filtro para la consulta que acabamos de especificar.
‫Ahora volvamos a Postman para
‫poder mostrarte una forma muy estándar de escribir
‫una cadena de consulta que incluya estos operadores.
‫Y lo hacemos así, entonces antes del signo igual
‫abrimos los corchetes y luego aquí
‫escribimos el operador, entonces en este caso
‫mayor que o igual, y eso es todo.
‫Básicamente así, agregamos una tercera parte al par
‫clave-valor, por lo que tenemos la
‫clave, el valor y ahora también el operador.
‫Y usamos nuevamente estos corchetes
‫para especificar el operador.
‫Nuevamente, esa es una forma estándar y,
‫por lo tanto, ahora
‫sigamos adelante y echemos un vistazo a la cadena de consulta que
‫nos brinda Express y, al igual
‫que antes, registremos una consulta de punto
‫de registro en la consola, una consulta de punto de registro de registro, todo Derecha.
‫Entonces, echemos un vistazo a cómo se verá nuestro
‫objeto de consulta cuando especifiquemos
‫la cadena de consulta de esta manera.
‫Muy bien, ahora lo primero que notará es
‫que tenemos un error aquí,
‫pero no se preocupe por eso por ahora.
‫Entonces, lo que me interesa aquí es este objeto, así que
‫déjame seguir adelante y copiarlo aquí.
‫Muy bien, entonces, ¿qué notas aquí?
‫Bueno, lo que vemos aquí es que el
‫objeto de consulta se ve casi idéntico
‫al objeto de filtro que escribimos manualmente, la
‫única diferencia es que en este tenemos el signo del operador MongoDB aquí.
‫Así que eso es realmente lo
‫único que falta aquí delante de este nombre de operador.
‫De acuerdo, entonces la solución
‫para esto es básicamente reemplazar todos los operadores
‫como este con sus operadores correspondientes de
‫MongoDB, así que básicamente agregando este signo de dólar aquí, está bien.
‫Así que ahora implementemos eso, y de
‫hecho lo haremos en algún lugar aquí,
‫agreguemos algunos comentarios más aquí.
‫Así que el filtrado que hicimos en la última lección,
‫ahora aquí agreguemos un filtrado avanzado, y ese es
‫el código que vamos a escribir ahora.
‫Ahora pongamos este código aquí en la parte superior, de acuerdo.
‫Entonces, este código aquí realmente no lo necesitamos, pero
‫aún quiero mantenerlo
‫aquí, así que pongámoslo aquí al final.
‫Y luego solo este código aquí como referencia solo para asegurarnos
‫de que sabemos lo que estamos haciendo aquí.
‫Muy bien, y ahora que sabemos lo
‫que tenemos que hacer aquí, en
‫realidad es solo un simple problema de Javascript.
‫Y la forma en que lo
‫estoy resolviendo es la siguiente, así que primero convertiré el objeto en
‫una cadena para que la cadena de consulta sea igual a JSON dot stringify del objeto de
‫consulta, y ahora puedo usar esa cadena de consulta para usar
‫la función de reemplazo en ella .
‫Muy bien, entonces lo que quiero reemplazar
‫ahora es el gte con el signo de dólar gte, y
‫luego también algún otro operador.
‫Entonces, los que queremos
‫reemplazar son mayores o iguales, mayores que,
‫menores o iguales, y menores que, y hay un par
‫de formas en las que podemos
‫hacerlo, pero usaré una expresión regular.
‫Y para mí, personalmente, las expresiones regulares son
‫uno de los conceptos más difíciles en Javascript y,
‫de hecho, en general en la programación.
‫Por lo general, cuando necesito hacer
‫algo como esto, simplemente voy a Stack Overflow o simplemente busco en
‫Google para encontrar la solución adecuada para el problema
‫que estoy tratando de resolver, de acuerdo.
‫Entonces, lo que queremos hacer
‫ahora aquí es básicamente hacer coincidir una de estas cuatro palabras y
‫luego reemplazarla con las mismas palabras pero con
‫el signo de dólar al frente.
‫Entonces, la expresión
‫regular para encontrar una de estas cuatro palabras es la
‫siguiente; entonces abrimos estos paréntesis y luego escribimos los operadores,
‫entonces gte o gt o lte o lt.
‫Y luego también necesitamos agregar este \ b antes y después, y eso es
‫porque solo queremos hacer coincidir estas palabras exactas.
‫Así que imagina que hay una palabra que lo
‫tiene dentro, entonces, por supuesto, no queremos
‫coincidir con la que solo queremos hacer coincidir si es
‫esta palabra exacta, sin ninguna otra cadena alrededor.
‫Entonces, esta expresión regular que tengo aquí se
‫encargará de eso, y en realidad
‫falta una pieza y esa es esta bandera g aquí, lo
‫que significa que en realidad sucederá varias veces.
‫Entonces, si tenemos dos o tres
‫operadores o incluso todos, entonces los reemplazará a todos.
‫Y sin este g aquí, solo
‫reemplazaría la primera aparición, por lo que esta es muy importante.
‫Ahora, ¿con qué queremos reemplazarlo realmente?
‫Bueno, el método replace realmente
‫acepta una devolución de llamada que es muy poderosa, y esta
‫devolución de llamada tiene como primer argumento,
‫la palabra coincidente o la cadena coincidente.
‫Entonces podemos pasar la coincidencia a esa función de devolución de llamada y
‫lo que devolvemos de esta devolución de llamada es la
‫nueva cadena que reemplazará a la anterior, ¿de acuerdo?
‫Así que hagamos una cadena de plantilla
‫aquí, y queremos reemplazar
‫la coincidencia con la coincidencia del signo de dólar, de acuerdo, esta es la parte
‫de la sintaxis de la cadena de la plantilla.
‫Así que esta es esta coincidencia, y luego queremos
‫poner el signo de dólar delante de eso.
‫Y ahora, solo para asegurarnos,
‫logrémoslo en la consola y queramos recuperar el objeto,
‫de modo que JSON analice la cadena de consulta.
‫Muy bien, déjeme seguir adelante y aclarar esto aquí para
‫que pueda ver los resultados un poco mejor.
‫Entonces, nuevamente, obtenemos este error
‫aquí y eso es, por supuesto, porque MongoDB
‫realmente no puede usar la cadena de
‫consulta o el objeto de consulta como lo tenemos ahora.
‫Y aquí tenemos los dos
‫resultados y realmente ves que nuestro resultado es exactamente
‫el mismo que antes y, por lo
‫tanto, algo aquí claramente no está funcionando.
‫Así que tratemos de averiguar qué es eso.
‫Y aquí la expresión regular se ve bien, todo se ve
‫bien aquí, ah, pero está bien, el problema
‫es que la estoy reemplazando en la cadena pero luego no la
‫estoy guardando en ningún lado.
‫Y, en realidad, queremos guardarlo de nuevo en la cadena de consulta.
‫Así que cambiemos esto aquí
‫a un let, para que luego pueda
‫mutar los datos y digamos, cadena de consulta, oh lo siento.
‫Entonces, la cadena de consulta es igual a la cadena de consulta reemplazada,
‫como antes, así que lo que estaba olvidando es simplemente guardar
‫el resultado aquí nuevamente en la variable.
‫Intentémoslo de nuevo, y ahora está funcionando.
‫Así que ahora tenemos el
‫signo de dólar frente al operador, genial.
‫Bien, entonces funciona, eliminémonos de estos comentarios aquí y ahora, finalmente,
‫todo lo que tenemos que hacer es
‫no usar el objeto de consulta, sino simplemente usar esto.
‫Entonces JSON. analizar la cadena de
‫consulta y, por supuesto, si no tiene ningún operador en
‫la cadena de consulta, todo funcionará bien.
‫Simplemente no encontrará ninguno de estos cuatro operadores allí, pero eso no
‫es un problema, simplemente no
‫reemplazará nada.
‫Y también sigamos adelante y probemos esto y está tomando
‫un poco de tiempo, pero de
‫hecho regresó con tres
‫resultados, así que ahora verifiquemos si son realmente correctos.
‫Entonces, la duración debe ser mayor o igual
‫a cinco, y esta aquí tiene una duración
‫de cinco, esta tiene una duración
‫de nueve, que es mayor o
‫igual que cinco, por lo que en realidad está funcionando, la dificultad
‫sigue siendo fácil y entonces qué significa que el código que
‫acabamos de implementar funciona bien.
‫Perfecto, ahora solo por diversión agreguemos otro
‫parámetro allí, así que filtremos por
‫el precio ahora también.
‫Entonces este tiene casi 2000, luego 1100, este tiene 300.
‫Así que ahora filtremos por precios menores a mil,
‫o menores a mil quinientos.
‫Y el precio, y ahora de nuevo nuestros soportes,
‫y usamos menos de 1500, y está bien, envía eso.
‫Y qué obtenemos aquí, oh, ahora solo tenemos dos resultados.
‫Y de hecho, los precios aquí, 397, y aquí 1197, por lo
‫que el anterior al 2000 ya no existe.
‫Así que también lo filtramos
‫usando nuevamente el operador que acabamos de implementar.
‫Y ahora podríamos filtrar por
‫todo tipo de cosas aquí, pero entiendes el punto, así
‫que sí, implementamos nuestro tipo de filtrado avanzado
‫aquí en este punto, que ahora incluso acepta estos cuatro operadores.
‫Ahora, en el mundo real,
‫tendríamos que escribir algo de documentación, básicamente
‫para permitir que el usuario sepa qué
‫tipo de operaciones pueden hacer en nuestra API, ¿verdad?
‫Entonces, nuevamente, idealmente documentaríamos completamente nuestra API, especificando qué solicitudes
‫se pueden realizar usando qué métodos htp,
‫y luego también qué tipo de filtrado
‫o clasificación, o todas estas
‫características, cuáles de ellas están disponibles y cómo
‫pueden usarlas, ¿verdad? ?
‫Ahora, en nuestro caso, por supuesto, no haremos
‫eso, pero nuevamente, no olvide que si
‫realmente está implementando una API que va a ser utilizada
‫por otra persona, entonces realmente debe hacer este tipo de documentación.
‫Pero de todos modos, pasemos ahora a nuestro próximo video
‫e implementemos una función de clasificación.