‫Instructor: Hasta ahora,
‫en esta sección, hemos hablado
‫sobre los modelos de Mongoose,
‫las operaciones CRUD con Mongoose, hicimos muchas
‫consultas y aprendimos sobre la canalización de agregación,
‫pero ahora para los próximos videos,
‫regresemos a nuestros datos. modelar y aprender algunas características súper
‫útiles que nos ofrece Mongoose para modelar nuestros datos.
‫Y la primera de la que vamos
‫a hablar son las propiedades virtuales.
‫Y entonces abramos nuestro modelo de gira aquí.
‫Muy bien, ahora las propiedades virtuales son básicamente campos que
‫podemos definir en nuestro
‫esquema pero que no se conservarán.
‫Por lo tanto, no se guardarán en la base de
‫datos para ahorrarnos algo de espacio allí.
‫Y la mayoría de
‫las veces, por supuesto, queremos realmente guardar nuestros datos en la
‫base de datos, pero las propiedades virtuales tienen
‫mucho sentido para los campos que se pueden derivar unos de otros.
‫Por ejemplo, una conversión de millas a kilómetros, no
‫tiene sentido almacenar estos dos
‫campos en una base de datos si
‫podemos convertir fácilmente uno a otro, ¿verdad?
‫Bien, ahora definamos una propiedad virtual que contenga la
‫duración del recorrido en semanas.
‫Y ese es un campo
‫básicamente que podemos convertir muy fácilmente de la
‫duración que ya tenemos en días, ¿verdad?
‫Y así es como funciona.
‫Definimos esas propiedades virtuales en el esquema del recorrido,
‫y por eso decimos, tourSchema. virtual y luego el nombre de
‫la propiedad virtual.
‫Así que llamémoslo semanas de
‫duración, y luego necesitamos definir el método get.
‫Y eso es solo porque esta propiedad virtual
‫aquí básicamente se creará cada
‫vez que obtengamos algunos datos de la base de datos.
‫Y entonces esta función get aquí se llama getter.
‫Ahora aquí pasamos una función, y en
‫realidad esta función
‫de devolución de llamada será una función real, no una función de
‫flecha, y les explicaré por qué en un segundo.
‫Ahora, ¿cómo definimos básicamente
‫la propiedad virtual?
‫Bueno, es muy simple, todo lo que tenemos
‫que decir es que queremos devolver esto. duración en este caso, dividida
‫por siete.
‫Así es como calculamos la duración en semanas, entonces la
‫duración en días dividida por siete porque hay
‫siete días en la semana, y esa
‫es la duración en semanas.
‫Por ejemplo, si una gira tiene siete días,
‫entonces, por supuesto, será una semana.
‫Ahora utilicé esta función regular aquí porque recuerde,
‫una función de flecha no obtiene su propia
‫palabra clave de disco.
‫Aquí realmente necesitamos la palabra clave disk
‫porque la palabra clave disk
‫en este caso apuntará al documento actual.
‫Y, por lo general, cuando
‫queremos usar esto, siempre debemos usar una función regular.
‫En realidad, en todas partes de
‫Mongoose, siempre usaré estas funciones regulares a las
‫que estamos acostumbrados.
‫Así que dale una oportunidad aquí, y eso es todo.
‫Así es como definimos las semanas
‫de duración, que no se mantendrán en la base
‫de datos, pero solo estarán allí tan pronto como obtengamos los datos.
‫Ahora mismo, en realidad, todavía no estará
‫allí, porque falta una pieza aquí, así
‫que permítanme comenzar mostrándoles eso.
‫Entonces, si intentamos obtener todos los
‫recorridos, verá que las semanas de duración
‫no se encuentran aquí.
‫Y eso es porque necesitamos definir explícitamente
‫en nuestro esquema que queremos las propiedades virtuales en
‫nuestra salida.
‫Y recuerda cómo le dije eso a esta Mangosta. esquema, podemos pasar no solo el
‫objeto con la definición
‫del esquema en sí, sino también
‫un objeto para las opciones del esquema.
‫Y entonces agreguemos eso aquí al final,
‫por lo que este primer objeto aquí es la definición del esquema,
‫y ahora el segundo objeto para las opciones.
‫Y lo que necesitamos especificar aquí es la propiedad de
‫dos JSON aquí, y lo que decimos es
‫que cada vez que los datos se generan como JSON, queremos
‫que los virtuales sean verdaderos.
‫Entonces, básicamente, los virtuales serán parte de la salida.
‫Y ahora estoy duplicando esto porque
‫también queremos decir objetar.
‫Entonces, básicamente, cuando los datos se generan
‫como un objeto.
‫Entonces, si ahora volvemos aquí, deberíamos poder
‫ver las semanas de duración.
‫Esperémoslo, y de hecho, aquí está.
‫Entonces son cinco días, y eso es 0. 71 semanas.
‫Aquí tenemos siete días, y eso es una semana.
‫Bien, eso realmente funciona, genial.
‫Ahora, una cosa que debemos
‫tener en cuenta es que no podemos usar esta propiedad
‫virtual aquí en una consulta, porque técnicamente no forman
‫parte de la base de datos.
‫Entonces no
‫podemos decir, por ejemplo, gira. encuentre dónde la duración de las semanas es igual a uno.
‫Eso no va a funcionar, nuevamente porque esta propiedad
‫no es parte de la base de datos.
‫Ahora, por supuesto, también podríamos haber realizado esta
‫conversión cada vez que consultamos los datos, por ejemplo,
‫como en un controlador, pero esa
‫no sería la mejor práctica simplemente porque queremos tratar de
‫mantener la lógica empresarial y la lógica de
‫la aplicación tan separadas. como sea posible, ¿recuerdas?
‫Así que esa fue toda la charla sobre
‫modelos pesados y controladores delgados de los que hablamos antes,
‫que dice que deberíamos
‫tener modelos con tanta lógica de negocios como podamos
‫descargarles y controladores delgados con
‫la menor lógica de negocios posible.
‫Entonces, las propiedades virtuales como esta son en realidad un
‫buen ejemplo de cómo podemos lograr
‫ese tipo de arquitectura.
‫Entonces, conocer la duración en semanas es
‫una lógica comercial porque tiene que ver con el
‫negocio en sí, no con cosas como solicitudes o respuestas,
‫por lo que hacemos el cálculo directamente en el
‫modelo al que pertenece y no
‫en el controlador.