‫Instructor: Usemos ahora un proceso llamado
‫poblar para tener realmente acceso a los
‫guías turísticos referenciados cada vez que solicitemos un recorrido determinado.
‫Entonces, en el último video, creamos
‫una referencia al usuario, aquí en este campo de guías,
‫justo en nuestro modelo de recorrido, ¿verdad?
‫Y ahora usaremos rellenar para reemplazar básicamente
‫los campos a los que hicimos referencia
‫con los datos relacionados reales.
‫Y el resultado de
‫eso parecerá que los datos siempre han
‫estado incrustados, cuando de hecho, como
‫sabemos, están en una colección completamente diferente, ¿de acuerdo?
‫Ahora, el proceso de llenado siempre ocurre en una consulta.
‫Y ahora vayamos a nuestro controlador de
‫recorrido, y luego directamente a la función donde obtenemos un solo recorrido.
‫Así que aquí, haz un recorrido.
‫Y aquí está nuestra consulta, ¿verdad?
‫Así que aquí es donde construimos nuestra consulta.
‫Y ahora todo lo que tenemos que hacer es agregar
‫el relleno a la consulta.
‫Entonces, complete, y luego el nombre del campo que
‫realmente queremos completar y
‫que se llama guías, ¿de acuerdo?
‫Y si lo piensas bien, este nombre tiene sentido.
‫Así que queremos poblar básicamente para
‫completar el campo llamado guías en nuestro modelo.
‫Bien, de nuevo, este campo de guías
‫solo contiene la referencia.
‫y con poblar, lo llenaremos con los
‫datos reales, de acuerdo y nuevamente solo en la consulta y no
‫en la base de datos real, ¿de acuerdo?
‫Entonces, esto es realmente todo lo que necesitamos hacer.
‫Y ahora echemos un vistazo al resultado, ¿de acuerdo?
‫Entonces, esta es la identificación del recorrido y recordemos que así es como
‫se ven bien los guías, ahora mismo, ¿de acuerdo?
‫Pero si ahora, hacemos un recorrido y con esa
‫identificación, esperemos ahora, y
‫de hecho, aquí están los datos sobre las guías.
‫Bien, estos dos elementos que ya teníamos en
‫las guías, ahora se han completado con los datos reales.
‫Y si ahora echamos un vistazo a
‫obtener todos los recorridos, eliminemos algunas de estas cosas aquí.
‫Tenemos demasiadas cosas abiertas aquí.
‫Entonces, si ahora obtenemos todos los recorridos,
‫está bien, desplácese hasta el final
‫donde debería estar
‫el nuevo y aparentemente ahora está bien,
‫oh, eso es porque tengo este
‫filtro aquí, eliminémoslo, y ahora tengo mi 10 resultados y en realidad está aquí,
‫por lo que el nuevo recorrido de prueba.
‫Y ahora ves que aquí vuelve a mostrarnos
‫solo los valores que están realmente en la base de datos.
‫Así que también confirmemos eso aquí en Compass.
‫Y así, de hecho, como puede ver, todavía no
‫tenemos los datos reales aquí en la base de datos, sino solo los identificadores.
‫De acuerdo, y es solo ese paso de llenado el que
‫luego reemplazará estos identificadores con los datos reales, ¿de acuerdo?
‫Y aquí mismo, eso no
‫sucede bien porque no implementamos el poblamiento
‫en el controlador de ruta get all tours.
‫Bien, ahora permítanme mostrarles un pequeño truco que podemos
‫hacer con la función rellenar.
‫Lo que en realidad es también seleccionar ciertos campos.
‫Entonces, por ejemplo, no estamos interesados en esta propiedad v aquí y tampoco
‫en passwordChangedAt right, así que ese no es
‫el tipo de
‫datos que queremos sobre nuestros guías turísticos.
‫Y aquí, en poblar, podemos especificar eso.
‫Entonces, en lugar de simplemente pasar
‫la cadena, podemos crear un objeto
‫de opciones
‫y luego podemos decir, la ruta es
‫guías, así que básicamente, el nombre del campo que queremos reemplazar,
‫y luego, como
‫de costumbre, podemos usar select , y luego menos,
‫este aquí y también, el otro, así que passwordChangedAt, es más
‫fácil de copiar, de acuerdo, así que cambiémoslo
‫aquí y enviemos esto nuevamente.
‫Y esta, por supuesto, no es la ruta
‫correcta, lo siento mucho, creo que también la usé antes,
‫en realidad, donde realmente quería
‫mostrarles esta, cierto, y lo siento mucho, pero aún así,
‫queremos deshacernos. de aquí es esta V
‫y esta contraseñaChangedAt.
‫Y ya lo
‫hicimos, así que si lo enviamos
‫ahora, por supuesto, solo obtenemos los datos que nos interesan.
‫Muy bien, entonces esta función de poblar
‫es una herramienta absolutamente fundamental para trabajar
‫con datos en Mongoose.
‫Y especialmente, por supuesto,
‫cuando hay relaciones entre los datos,
‫está bien, por lo que siempre debe saber exactamente cómo
‫y cuándo usarlos para sus propias aplicaciones.
‫Y para entrenarnos para eso, por supuesto lo
‫usaremos muchas veces más a lo largo de esta sección.
‫Ahora, solo una cosa que quiero que tenga
‫en cuenta es que, en segundo plano, el uso de
‫poblar aún creará una nueva
‫consulta, por lo que esto podría afectar su rendimiento.
‫Está bien, por supuesto, si solo lo hace
‫una o dos veces y en una especie de aplicación pequeña, entonces
‫ese pequeño impacto en el rendimiento no es gran cosa.
‫Pero en una aplicación enorme, con toneladas
‫de datos por todas partes, eso
‫podría tener algún tipo de efecto, ¿de acuerdo?
‫Así que tenlo en cuenta.
‫De acuerdo, y realmente tiene sentido, porque ¿de
‫qué otra manera Mongoose podría obtener datos sobre
‫recorridos y usuarios al mismo tiempo?
‫Necesita crear una nueva consulta básicamente
‫para poder crear esta conexión.
‫Bien, y ahora solo para terminar esto,
‫recordemos lo que les
‫mostré de que esto en realidad no funcionó cuando tenemos todos los recorridos.
‫Entonces, recuerde cómo en esta situación, simplemente obtenemos los
‫identificadores de los guías turísticos y no los
‫datos de usuario referenciados.
‫De acuerdo, una solución sería básicamente copiar este
‫código aquí, por lo que esta función de poblar, también aquí
‫en este controlador de ruta, pero por
‫supuesto, el código duplicado nunca es una buena idea.
‫Y espero que
‫ya conozca en este momento una mejor manera de hacer esto.
‫Y la respuesta es el middleware de consultas.
‫Bien, avancemos rápidamente y pasemos a nuestro modelo, y
‫estoy copiando este
‫código aquí ahora y, sí, hagámoslo aquí.
‫Entonces,
‫un pre y luego lo haré como antes con
‫una expresión regular, que luego funcionará para
‫todo lo que comience con find.
‫Entonces, así, está
‫bien, y por supuesto, hacemos esto en el middleware de consultas, bueno porque,
‫este es el tipo de middleware
‫que se ejecutará cada vez que haya una consulta.
‫Bien, juntemos todos estos middlewares previos y
‫luego tengamos el post.
‫Muy bien, déjeme copiar el código que teníamos antes y ahora agreguemoslo
‫a esto, porque recuerde que en
‫el middleware de consultas,
‫esto siempre apunta a la consulta actual.
‫Y ahora, básicamente, todas las consultas completarán automáticamente
‫el campo de guías con el usuario
‫al que se hace referencia.
‫Bien, y ahora podemos deshacernos de él aquí.
‫Y sí, eso es todo.
‫Así que ahora lo hacemos aquí, en
‫lugar de hacerlo en dos lugares, en el controlador.
‫Y este es un pequeño truco en caso de
‫que siempre quiera completar todos sus documentos.
‫Entonces, probémoslo.
‫Primero, si todavía funciona aquí.
‫Y de hecho lo hace, por lo que obtenemos nuestros dos usuarios.
‫Y luego probémoslo aquí donde antes no funcionaba y
‫ahora sí, así que aquí está el resultado de eso.
‫Y ahora, solo para asegurarnos
‫de que realmente funciona, actualicémoslo y, básicamente, agreguemos otra guía turística.
‫Así que copiemos la identificación del recorrido aquí y luego actualice el recorrido,
‫por lo que debemos poner
‫la identificación aquí, y luego en el cuerpo, obtengámoslo de crear recorrido,
‫por lo que
‫esta guía, y lo ponemos aquí,
‫y luego también necesitamos obtener nuestro otro usuario.
‫Entonces, es este de aquí, que en realidad no es
‫una guía o ni siquiera un administrador, pero aún así
‫es solo para probar, así
‫que tomemos esta identificación y luego pongámosla aquí.
‫Entonces, actualicémoslo, eso todavía funciona, y ahora, incluso
‫en esta salida,
‫ya tenemos los datos completos.
‫De acuerdo, porque en nuestra expresión regular,
‫recuerde que usamos find.
‫Y así, esta actualización aquí se implementa usando find by id y
‫update, por lo que también comienza con find y,
‫por lo tanto, el middleware de consulta que éramos antes
‫también se aplica a esta función.
‫De acuerdo, así es como funciona el poblado.
‫De acuerdo, de nuevo, una herramienta extremadamente importante en tu
‫caja de herramientas de Mongoose, de acuerdo.
‫Y solo para
‫asegurarnos, tomemos 15 segundos aquí para recapitular.
‫Entonces este es un proceso de dos pasos.
‫Primero, crea una referencia a otro modelo.
‫Y así, con esto, crea efectivamente
‫la relación entre estos dos conjuntos de datos.
‫Luego, en el segundo paso, completa ese
‫campo que acaba de especificar antes,
‫de modo que las guías utilicen el método de poblar.
‫Muy bien, muy simple, muy directo, todo lo que necesita
‫es comprender realmente la
‫lógica detrás de todo esto y
‫luego está listo para comenzar a usarlo.