‫Maestro: Recuerde cómo en
‫el video sobre nuestro modelo de datos, dijimos
‫que podíamos incrustar o hacer referencia a
‫los datos de la guía turística, así
‫que en este video les mostraré cómo podríamos implementar la
‫incrustación de documentos de guía turística en un documento turístico.
‫Entonces, nuevamente, en esta conferencia vamos a
‫incrustar documentos de usuario en documentos de viaje, y luego,
‫en el siguiente video, les
‫mostraré cómo podemos realmente hacer referencia a
‫los usuarios en lugar de incrustarlos, ¿de acuerdo?
‫Entonces, la idea aquí es que al crear
‫un nuevo documento de viaje, el usuario simplemente agregará
‫una serie de ID de usuario, y luego obtendremos
‫los documentos de usuario correspondientes basados en
‫estos ID y los
‫agregaremos a nuestros documentos de viaje.
‫Entonces, en otras palabras, los incluimos en nuestra gira, ¿de acuerdo?
‫Entonces, hagámoslo aquí ahora.
‫Entonces, las guías serán del tipo arreglo, ¿de acuerdo?
‫Muy simple, y de hecho, antes de
‫implementar cualquier código, permítame mostrarle como
‫ejemplo cómo funcionaría esto al crear un nuevo recorrido.
‫Entonces, volvamos a Postman aquí
‫y creemos un nuevo recorrido, de
‫acuerdo, y aquí
‫en nuestro cuerpo, por supuesto, ahora agregaríamos las guías, las
‫citas y luego especificaremos una serie de ID, ¿de acuerdo?
‫Entonces, obtengamos algunas ID de usuario.
‫Entonces, obtenga todos los usuarios, veamos qué tenemos aquí.
‫Así que tenemos una guía aquí, en
‫realidad, así que obtengamos esta
‫ID junto con las comillas,
‫en realidad, y pongamos
‫eso aquí, y agreguemos algunas otras.
‫Entonces, esto aquí también y en realidad solo estos dos.
‫Eso debería ser suficiente para probar estas cosas, está bien, y así
‫es como vamos a
‫crear un nuevo recorrido con dos guías, está
‫bien, y una vez que guardemos este
‫recorrido, recuperaremos
‫el dos documentos
‫de usuario correspondientes a estos dos ID, ¿de acuerdo?
‫Entonces, implementemos eso, y de
‫vuelta en nuestro
‫modelo, el mejor lugar para
‫hacerlo es un middleware pre-guardado, ¿verdad?
‫Entonces, eso sucederá automáticamente detrás de escena,
‫básicamente, cada vez
‫que se guarde una nueva gira y, de
‫hecho, no quiero hacerlo aquí.
‫Tenemos una consulta, aquí, aquí
‫está el documento "Middleware", así
‫que hagámoslo aquí.
‫Entonces tourSchema. pre,
‫Muy bien, llamemos a continuación de inmediato aquí, para
‫que no lo olvidemos al final.
‫Bien, entendemos esto. guías como entrada, y recuerde que esto
‫será una matriz de todas las
‫ID de usuario, correcto, por lo que las recorreremos
‫usando un archivo. map, y
‫luego, en cada iteración, obtenga
‫el documento de usuario para la ID
‫actual, de acuerdo, y lo almacenaremos dentro de las guías, ¿de acuerdo?
‫Entonces, el elemento actual, que será el ID,
‫bueno, llamémoslo ID
‫para que sea un poco más
‫fácil de entender, y ahora realmente necesitamos al usuario, correcto,
‫así que sigamos adelante e importémoslo.
‫Entonces, const User,
‫require, y
‫en realidad está en la misma carpeta aquí, de acuerdo, entonces
‫User. findByID
‫con el ID actual, ¿de acuerdo?
‫Pero ahora, tenga en
‫cuenta que en realidad necesitamos esperar esta promesa aquí, correcto y,
‫por lo tanto, la función
‫debe marcarse como asíncrona,
‫pero ahora tenemos un problema, está bien,
‫porque el. El método map
‫asignará el resultado de cada iteración al nuevo elemento en
‫la matriz de guías, está bien, y ahora
‫tenemos una función asincrónica aquí
‫y, como saben, que devuelve una promesa, por
‫lo que en este momento esta matriz
‫de guías aquí es básicamente una variedad llena de promesas, de acuerdo.
‫De hecho, llamemos a estas guíasPromesas, por
‫lo que ahora necesitamos
‫ejecutar todas estas promesas, básicamente al mismo tiempo.
‫Como le mostré un poco antes en
‫este código, al menos si
‫no omitió la sección de JavaScript asincrónico, todo
‫lo que tenemos que hacer es esperar Promise. all y luego guidesPromise, está
‫bien, y podemos asignar
‫directamente el resultado de esto
‫a esto. guías, y básicamente anular
‫esa matriz de ID de templo con
‫una matriz de documentos de usuario, de acuerdo, y dado que
‫ahora estamos usando
‫await aquí, necesitamos marcar esta función como asíncrona, ¿de acuerdo?
‫Dale una oportunidad, y creo que eso es todo, ¿de acuerdo?
‫Entonces, nuevamente, necesitamos usar Promise. todo aquí porque
‫el resultado de todo esto aquí es una promesa, de
‫acuerdo, entonces esta matriz aquí va a ser
‫una matriz llena de promesas
‫que luego ejecutamos esperando Promise. ¿todo bien?
‫Entonces, probemos esto ahora,
‫y ya tenemos todo este código aquí listo,
‫deberíamos cambiar este nombre aquí.
‫Entonces, 'Test Tour', pero los ID ya están aquí.
‫Así que enviemos esto, y el nombre de nuestro recorrido debe ser
‫más largo, 'Nuevo recorrido de tareas. 'Está bien,
‫pero ahora echemos un vistazo a nuestros resultados, y
‫de hecho tenemos nuestras guías aquí, ¿de acuerdo?
‫Entonces, estos son los documentos
‫completos y, de hecho, no solo las identificaciones, ¿verdad?
‫Genial, así es como
‫podríamos implementar la incrustación para este ejemplo de guías turísticos.
‫Ahora bien, este código simple que implementamos
‫aquí, por supuesto, solo funciona para crear nuevos documentos,
‫no para actualizarlos, ¿verdad?
‫Así que ahora, tendríamos que
‫seguir adelante e implementar esta misma lógica también para las actualizaciones.
‫Sin embargo, no voy a hacer eso
‫porque, recuerde del video en el que modelamos nuestros datos,
‫que en realidad hay algunos
‫inconvenientes de incrustar estos datos en este caso.
‫Por ejemplo, imagine que un guía
‫turístico actualiza su dirección de correo electrónico o
‫cambia su función de guía a guía principal.
‫Cada vez que ocurriera uno de estos cambios, tendría que
‫verificar si un recorrido tiene a ese
‫usuario como guía y, de ser así, actualizar el
‫recorrido también, y eso es realmente mucho
‫trabajo y no lo estamos. vas
‫a ir
‫en esa dirección, ¿de acuerdo?
‫Ahora, todavía quería mostrarte cómo funciona realmente
‫la incrustación y
‫cómo podríamos implementarla en esta situación
‫porque realmente creo que es muy importante
‫que aún sepas cómo hacer todo
‫en caso de que
‫alguna vez lo necesites en tus
‫propias aplicaciones. pero en esta
‫situación particular, en lugar de incrustar, usaremos referencias,
‫y hablé sobre las razones para
‫hacerlo en ese video, ¿de acuerdo?
‫Por lo tanto, sigamos adelante y hagámoslo
‫bien en la próxima conferencia.