‫Hombre: Oye, ahí. Entonces, en este
‫video, seguiremos trabajando con la tubería de agregación.
‫Y me encanta este video porque
‫en este vamos a resolver un problema comercial real.
‫Así que imaginemos que realmente estamos desarrollando
‫esta aplicación para Nature's Company.
‫Entonces, digamos que nos piden
‫que implementemos una función para calcular
‫el mes más ocupado de un año determinado.
‫Básicamente, calculando cuántos recorridos
‫comienzan en cada mes del año dado.
‫Y la empresa realmente necesita este
‫ajuste fino para prepararse en consecuencia para estos
‫recorridos, como contratar guías turísticos o comprar el equipo
‫y manejar todo eso.
‫Así que este es un problema empresarial
‫real que ahora podemos
‫resolver utilizando canalizaciones de agregación. ¿Okey?
‫Entonces, esto será un verdadero desafío y
‫yo ... espero que sea
‫muy divertido resolver este tipo de necesidad comercial real.
‫Al menos si Nature's era un negocio real, supongo.
‫Entonces, comencemos
‫creando nuevamente la función.
‫Así que exporta punto y lo llamaré: obtener
‫un plan mensual.
‫Está bien.
‫Y de nuevo va a ser un
‫método de función asíncrona, solicitud de respuesta o prueba de bloque de caché
‫y podría haber ido y haberlo
‫copiado desde aquí.
‫Pero no importa. Está bien.
‫Y ahora vamos a implementar la ruta
‫aquí mismo.
‫Y solo voy a duplicar
‫esta línea, así que plan mensual ...
‫Y luego aquí este se llama:
‫obtenga un plan mensual. Y de hecho queremos poder
‫pasar un año en la URL. Y entonces usemos un
‫parámetro de URL para eso. Está bien.
‫Entonces uh ...
‫volviendo aquí, empecemos por
‫definir el año.
‫Entonces, el año proviene de req dot params dot year.
‫Recuerda eso y luego
‫otra vez ese truco para transformarlo en
‫un número. ¿Okey?
‫Luego, crearé la variable del
‫plan que esperará el agregado de puntos de recorrido.
‫Así que como antes y por
‫ahora lo dejaré vacío aquí.
‫Y copiaré este código para
‫luego enviar los resultados.
‫Y este se llama plan y está bien.
‫Así que ahora estamos listos para comenzar nuestra canalización de agregación
‫tal como lo hicimos en el último video.
‫Ahora para comenzar, echemos un vistazo a
‫los resultados completos.
‫Solo para que podamos tener una mejor
‫idea de lo que realmente necesitamos construir aquí.
‫Así que obtengamos todos los recorridos y eliminemos por completo
‫esta cadena de consulta.
‫Y aquí tenemos los nueve recorridos y
‫cada uno de los recorridos, recuerde, tiene una variedad
‫de estas fechas de inicio.
‫Entonces, una gira comenzará el 25 de abril de 2021.
‫Luego, el siguiente comienza el 20 de julio y luego el
‫5 de octubre. Está bien.
‫Entonces el siguiente tiene esta fecha de inicio
‫y creo que todos tienen tres fechas de inicio.
‫¿Okey? Entonces, estas fechas son lo
‫que realmente necesitamos como punto de partida para crear esta
‫función o para crear esta canalización de agregación.
‫Porque recuerde, queremos contar cuántos recorridos hay para cada uno de
‫los meses en un año determinado.
‫Entonces, analicemos 2021, ¿de acuerdo?
‫Tenemos una gira en abril, una en julio y una en octubre.
‫Entonces echemos un vistazo al próximo recorrido.
‫Aquí tenemos uno en junio, uno en julio y uno en agosto.
‫Entonces en julio ya tenemos dos.
‫Entonces este y este.
‫El siguiente tenemos uh, uno en marzo, uno en mayo
‫y uno en junio. Así que en junio también ya tenemos dos.
‫¿Okey? Y entonces podemos seguir
‫haciéndolo manualmente, pero por supuesto queremos hacerlo con nuestra agregación.
‫Entonces, si quieres sumar todo
‫esto, la forma más fácil sería básicamente tener una
‫gira para cada una de estas fechas aquí, ¿verdad?
‫Y podemos hacerlo utilizando la canalización de agregación.
‫Hay una etapa para hacer exactamente eso.
‫Y eso se llama relajarse.
‫Así que usémoslo ahora y luego
‫les mostraré el resultado y por qué realmente lo necesitamos.
‫¿Okey? Entonces, nuevamente definimos
‫un objeto y luego el nombre del escenario.
‫Y en este caso es: relajarse. ¿Okey?
‫Y lo que va a hacer el desenrollado es básicamente deconstruir
‫un campo de matriz de los
‫documentos de información y luego generar un documento para cada elemento de la matriz.
‫Y eso es lo que estaba diciendo antes.
‫Es decir, que básicamente queremos tener una gira para cada
‫una de estas fechas en la matriz. ¿Okey?
‫Y esta etapa puede ser realmente útil para muchos casos.
‫Entonces, el campo con la matriz que queremos desenrollar
‫son las fechas de inicio.
‫Está bien y por ahora eso es todo.
‫Así que solo quiero mostrarte el resultado de eso ahora mismo.
‫Y creo que ya tenemos todo listo para
‫que esto funcione. Así que solo tenga en
‫cuenta que la ruta se llama plan mensual y luego con un año.
‫Lo cual por ahora no va a tener
‫ningún resultado pero um, tenemos que definirlo de todos modos.
‫Entonces plan mensual y el año 2021.
‫Así que enviemos esto ahora.
‫Y, de hecho, ahora tenemos esta fecha de inicio ya no
‫como una matriz, sino solo este primer elemento de la
‫matriz que teníamos antes.
‫Pongámoslos uno al lado del otro. Y como ves, lo teníamos o
‫de hecho lo haremos con el primero.
‫Así que tuvimos el primer receptor para el 25 de abril,
‫el 20 de julio y el 5 de octubre.
‫Y ahora tenemos el primer excursionista en esta fecha aquí, luego tenemos
‫el primer caminante el 20 de julio, y
‫ahora tendremos el primer caminante para el 5 de octubre.
‫Entonces, exactamente el resultado que queríamos
‫porque ahora tenemos un documento para cada una de las fechas.
‫¿Okey? Entonces, en lugar de tener nueve, ahora tenemos 27,
‫que es nueve por tres. Está bien.
‫Entonces, esa es la primera cita. Ahora sigamos adelante y
‫seleccionemos los documentos para el año que se aprobó.
‫¿Okey? Y recuerde qué etapa
‫usamos para eso, eso es correcto, usamos coincidencia.
‫Así que recuerde, la coincidencia es básicamente para seleccionar documentos.
‫Así que solo para hacer una consulta.
‫Y entonces el año está en las fechas de inicio.
‫Así que las fechas de inicio son las que buscaremos.
‫Así que las fechas de inicio y ahora, ¿qué queremos?
‫Bueno, queremos que la fecha sea básicamente mayor que el 1
‫de enero del año actual, así
‫que digamos 2021. Y queremos que sea
‫menos del 1 de enero de 2022, está bien.
‫Entonces, básicamente, queremos que sea 2020 y 2022. ¿Está bien?
‫Así que pongámoslo en código ahora.
‫Entonces, las fechas de inicio y luego necesitamos
‫otro objeto para los operadores. Entonces, mayor o igual que
‫y en MongoDB esto funciona perfectamente bien con fechas.
‫Entonces, Mongo es realmente perfecto para trabajar con fechas,
‫como hacer comparaciones de fechas. Funciona muy bien.
‫Así que ahora necesitamos definir una nueva fecha aquí
‫para poder compararla con la fecha que está en cada
‫uno de los documentos.
‫Entonces, la fórmula de la fecha es año, mes y fecha.
‫Entonces hagamos una cadena de plantilla aquí
‫y usemos nuestra variable año.
‫Así que el 1 de enero.
‫Entonces, queremos que nuestra fecha sea mayor o
‫igual que el 1 de enero de 2021 y escribamos eso aquí solo
‫para tenerlo en cuenta. Y queremos que sea
‫menos menos que, o podemos decir menos que, igual.
‫Sigamos adelante y copiemos este y luego el 31
‫de diciembre. ¿Okey? Entonces, básicamente queremos que sea entre
‫el primer día del año y el último día
‫del año actual. ¿Okey?
‫Así que sigamos probándolo, así que lo probaré ahora después
‫de cada una de las etapas. Entonces enviando esto
‫y ahora deberíamos tener solo tours aquí que sean en 2021.
‫Así que confirmemos que 2021, aquí también, aquí
‫también, aquí también.
‫Mm, como ves, realmente no tenemos otro año. Derecha.
‫Siempre es 2021. ¿Okey? Entonces creo que hemos visto suficiente.
‫Y entonces, volvamos. El siguiente paso es donde ocurre la magia.
‫Y eso suele ser en la fase de grupos.
‫Así que agreguemos el grupo aquí, al igual que
‫antes, agrupe y recuerde que tenemos que especificar el campo
‫ID básicamente para decir lo que queremos usar para agrupar nuestros documentos.
‫Ahora queremos agruparlos por meses, ¿verdad?
‫Pero actualmente simplemente tenemos la fecha completa, con
‫el año, el mes, la fecha e incluso la hora.
‫Así que supongo que son las 10 de la mañana o algo así.
‫Pero de nuevo solo queremos el mes. Así que déjame
‫mostrarte otro operador mágico de MongoDB.
‫Entonces, ¿dónde está eso? Entonces, aquí, en esta referencia aquí,
‫en realidad tenemos un par de operadores de canalización de agregación.
‫Y es aquí donde tenemos este operador de
‫fecha realmente útil. Así que echemos un vistazo a esto.
‫Y el que usaremos es el mes.
‫Entonces vuelve al mes para una fecha como un número.
‫Y esto básicamente extraerá el
‫mes de nuestra fecha. Y hay muchos otros operadores.
‫Así, por ejemplo, incluso podríamos calcular la semana o solo
‫el año, ¿de acuerdo?
‫Pero la semana también puede ser muy útil.
‫Pero sigamos con el mes. ¿Está bien?
‫De nuevo, puede echar un vistazo a estos
‫eh ... operadores de agregación especiales.
‫Porque hay un montón de ellos, como ves aquí.
‫¿Okey? Entonces, en realidad, estos operadores
‫que estamos usando aquí en la tubería de agregación son, sí, exactamente eso.
‫Son operadores de canalización de agregación.
‫Tenemos etapas y luego operadores que podemos usar. Bueno.
‫Y en este caso, nuevamente, usamos el mes.
‫Y luego nuevamente el nombre
‫del campo, de donde básicamente queremos extraer la fecha.
‫Está bien, dale un guardado, entonces ese error desaparece, está bien.
‫Así que lo estamos agrupando ahora por mes.
‫Y ahora, la información real
‫que queremos para cada mes es ¿cuántos recorridos comienzan en ese mes?
‫¿Derecha? Y para eso todo lo que
‫vamos a hacer es básicamente contar la cantidad de giras que tienen un mes determinado, ¿verdad?
‫Entonces comienza el número de recorridos.
‫Y este es realmente muy
‫similar a lo que hicimos antes.
‫Entonces usamos agregar y luego para cada uno de
‫los documentos agregamos uno. Así como lo hicimos antes.
‫Pero en realidad es suma y no suma, está bien, al igual que aquí cuando
‫contamos los recorridos para cada una de las dificultades, simplemente agregamos
‫el número uno para cada uno de los documentos.
‫Y aquí hacemos lo mismo.
‫Muy bien, probemos esto de nuevo.
‫Y ya nos estamos acercando mucho a nuestro resultado final.
‫Y de hecho, aquí vamos. Tenemos febrero con una gira.
‫Diciembre con una gira, tenemos noviembre o septiembre
‫con dos giras.
‫Y luego tenemos dos recorridos en todo
‫esto aquí, de hecho, tenemos tres recorridos en julio.
‫Así que esto se acerca bastante a nuestro resultado.
‫Eso es absolutamente fantástico.
‫Así que esta parte aquí, que creo que fue la más
‫difícil, ya está funcionando.
‫Está bien.
‫Ahora, en realidad, queremos más información, que
‫no es solo cuántos recorridos, sino
‫también qué recorridos. Así que hagámoslo.
‫Entonces, si desea información sobre qué recorridos, en realidad
‫debería ser una matriz.
‫¿Derecha? Porque, ¿de qué
‫otra manera especificaríamos dos o tres recorridos diferentes en un campo, verdad?
‫Y entonces, básicamente, queremos crear una matriz y
‫lo hacemos usando push y luego lo que
‫vamos a insertar en esa matriz a medida que
‫cada documento pasa por esta canalización es simplemente el
‫nombre del documento, o en realidad
‫el campo de nombre. Por tanto, no es el nombre del documento,
‫sino el campo de nombre.
‫Entonces, en este caso, el nombre de la gira. Bien, probémoslo.
‫Y...
‫bam, aquí vamos!
‫Así que ahora también tenemos el nombre de los recorridos allí.
‫Fantástico. Veamos, sí. Aquí tenemos los tres.
‫A continuación, cambiemos el nombre de este
‫campo aquí, ¿de acuerdo?
‫Ahora no cambiará realmente, pero simplemente agregaremos otro
‫campo que tendrá el mismo valor
‫aquí para que luego podamos eliminar básicamente esta ID.
‫Bien, y para eso usaremos la siguiente etapa que
‫se llama: agregar campo.
‫Así que agregue un campo y
‫este es bastante sencillo. Simplemente hace lo que dice.
‫Entonces, agregar campo se usa para agregar campos y en
‫realidad se llama agregar campos.
‫Y ahora, el nombre que queremos agregar o el campo se
‫llama mes y tiene el valor del campo con
‫el ID del nombre.
‫Está bien. Entonces, bastante sencillo,
‫simplemente el nombre del campo y luego el valor.
‫Que, como de costumbre, necesitamos usar el signo de dólar.
‫De acuerdo, solo para probarlo de nuevo.
‫De hecho, ahora tenemos el mes.
‫Luego, a continuación, eliminemos esto y
‫usamos project.
‫Así que realmente estoy tratando de poner todas las etapas aquí que pueda
‫... para mostrarles realmente todo lo que puedo.
‫Entonces, ¿cómo funciona el proyecto? Bueno, simplemente le damos a
‫cada uno de los nombres de campo un cero o uno.
‫Así que déjame mostrarte eso. Entonces podemos decir ID y
‫ponerlo en cero. Y eso hará
‫que la identificación ya no aparezca. Si pongo uno
‫aquí, bueno, entonces aparecerá, ¿de acuerdo?
‫Así que no voy a probar este. Permítanme agregar el siguiente,
‫que es del tipo que creo que lo usé antes, pero aún así
‫quiero ordenarlo aquí por el número de recorridos.
‫Bien, ahora mismo no es 100% útil, todavía nos faltan porque deberíamos
‫ordenarlo por uh, realmente por el número de inicios
‫de la gira.
‫Entonces, el nombre del campo es el número de inicios del recorrido y recuerde
‫que teníamos uno antes que era para ascender y menos uno que
‫era para descender y, por supuesto, eso es
‫lo que queremos.
‫Entonces, comenzando con el número más alto.
‫Entonces deberían ser tres en nuestro caso y sí, lo es.
‫Así que julio es el mes más activo con tres
‫recorridos: Forest Hiker, Sea Explorer y Sports Lover.
‫Bien, esto ya está hecho.
‫Permítanme mostrarles una, uh última etapa aquí, que no
‫es realmente útil aquí, pero quería
‫mostrárselas de todos modos.
‫Entonces tenemos el límite, y este es exactamente el mismo que
‫el límite en la consulta. Así que básicamente nos
‫permitirá tener sólo seis documentos aquí.
‫Bien, básicamente seis salidas.
‫Bien, probemos eso, y ahora, de hecho, solo deberíamos
‫tener seis.
‫Uno, dos, tres, cuatro, cinco y seis. Está bien.
‫Una vez más, no es realmente útil porque eso va a
‫cortar los seis meses menos importantes, que no queremos.
‫Así que simplemente configurémoslo en
‫12 aquí, solo para que podamos dejarlo aquí como referencia para usted.
‫Muy bien, una vez más, pero debería estar funcionando ahora y
‫el problema real del negocio ya está resuelto.
‫Y sé que hay muchas piezas en movimiento
‫que tenemos aquí. Muchas etapas diferentes.
‫Y sé que es mucho para que lo asimiles en este momento.
‫Pero no se preocupe, no es necesario que sepa todas
‫estas cosas al mismo tiempo.
‫Con la práctica seguirás mejorando y sabrás
‫cuándo usar cuál de las herramientas
‫tienes a tu disposición.
‫Solo tenga en cuenta que siempre puede leer la
‫documentación, que es un material de aprendizaje bastante completo y realmente excelente
‫además de este curso, ¿de acuerdo?
‫Y eso se aplica a todas las tecnologías
‫que estamos aprendiendo aquí.
‫Así que te animo a que estudies siempre la documentación.
‫Y sé que puede ser realmente aterrador mirarlo y sin este
‫curso sería mucho más difícil aprender de la documentación,
‫pero con este buen
‫punto de partida que obtienes
‫en estos videos, entonces es mucho más fácil
‫para ti mantener aprendiendo más
‫y más eh, usando esa documentación, ¿de acuerdo?
‫Entonces, no esperaría que resolviera este desafío por
‫su cuenta, por supuesto, por eso básicamente lo
‫hicimos juntos aquí, ¿verdad?
‫Pero espero que te hayas divertido tanto como
‫yo porque, de nuevo, me encanta resolver este tipo de problemas, es ...
‫es muy divertido, creo.
‫Pero de todos modos, ya basta de hablar.
‫En el resto de la sección, ahora
‫hablaremos sobre un par de otras características que tenemos disponibles
‫en Mongo, así que eso también debería ser bastante divertido.