‫Jonas: Aprendimos sobre el middleware
‫de documentos y consultas, y ahora el último middleware
‫del que vamos a hablar es el middleware de
‫agregación, y como probablemente
‫pueda adivinar, el middleware de
‫agregación nos permite agregar ganchos antes o después de que
‫ocurra una agregación,
‫y así continuemos ahora con nuestro ejemplo anterior en el que
‫ocultamos los recorridos secretos de las consultas, ahora, en conjunto, los
‫recorridos secretos todavía se están utilizando, ¿verdad?
‫Entonces, confirmemos rápidamente que
‫en realidad, por ejemplo, aquí en nuestras estadísticas de
‫recorrido, así que ahí es donde usamos
‫la primera agregación y, como puede ver,
‫tenemos cuatro recorridos aquí, cuatro en fácil
‫y tres en medio, por lo que son 11, pero
‫ya Sepa que en realidad solo queremos 10 recorridos.
‫Así que hay 10 recorridos que no
‫son secretos y uno que es secreto, por lo que
‫ahora tenemos todos estos 11 recorridos aquí y, básicamente,
‫también queremos excluir el recorrido secreto en la agregación.
‫Entonces, ¿cómo podríamos hacer eso?
‫Bueno, echemos un vistazo a dónde
‫está sucediendo realmente nuestra agregación, así que está aquí abajo, sí, así que en
‫obtener los pasos del recorrido, y lo que podríamos hacer es aquí,
‫en este estado de coincidencia, simplemente excluir los recorridos
‫secretos que son verdaderos, ¿verdad?
‫Entonces sería bastante fácil de
‫agregar aquí, pero luego tendríamos que
‫agregar lo mismo aquí en la otra agregación
‫que tenemos, y si tuviéramos aún más
‫agregaciones, tendríamos que agregar eso en todas y
‫eso es por supuesto que no es
‫una buena idea, porque, por ejemplo, podríamos olvidarnos de
‫hacerlo y también es solo un código repetitivo, así que simplemente excluyémoslo a
‫nivel de modelo, de acuerdo, agreguemos middleware de agregación aquí comenzando con
‫un comentario.
‫Entonces, el middleware de agregación y, al igual
‫que antes, tenemos tourSchema. pre, por lo que queremos que esto suceda
‫antes de que la agregación
‫se ejecute realmente, por lo que aquí usamos el gancho agregado.
‫Muy bien y luego nuestra función, que nuevamente
‫acepta la siguiente función, por lo que llama al siguiente middleware.
‫Muy bien, comencemos por echar un vistazo a esto, así que
‫recuerde que aquí en el middleware de consultas, este
‫objeto apunta a la consulta actual.
‫Luego, aquí en el middleware de documentos, este
‫objeto apunta al documento
‫actual, y aquí abajo, en el middleware de
‫agregación, esto apuntará al objeto de agregación actual.
‫Bien, echemos un vistazo a eso en la
‫consola, pero antes de eso, permítanme eliminar este registro aquí.
‫Muy bien, guarde, ejecute esta agregación aquí y eso está
‫tomando mucho tiempo, así que cancelemos y regresemos y
‫eso es probablemente porque no estamos
‫llamando a continuación aquí, y como ya sabemos, nos quedamos atascados
‫en la función de
‫middleware. y eso no es bueno.
‫Intentémoslo de nuevo ahora, envíe, y sí,
‫ahora estamos de regreso y ahora echemos un vistazo
‫al objeto de agregación.
‫De acuerdo, hay muchas cosas
‫aquí, así que no es realmente interesante aquí y realmente
‫no puedo encontrar lo que estoy tratando de mostrarles
‫aquí, así que simplemente agreguemos esto. pipeline bien porque lo que
‫realmente quería mostrarte es solo el objeto pipeline.
‫Está bien, y en realidad es una canalización como esta, por lo
‫que en realidad es una función, un método.
‫Así que limpiemos la consola aquí.
‫Intente esto nuevamente, y aquí obtenemos la canalización de agregación, y esa
‫es simplemente la matriz que pasamos a
‫la función agregada antes.
‫Bien, echemos un vistazo y
‫aquí tenemos esa matriz, esta no esta.
‫Entonces tenemos la coincidencia con
‫el grupo y luego la clasificación, por lo que
‫si echamos un vistazo aquí en la consola, tenemos nuestra coincidencia con el
‫promedio de calificaciones que tenemos en grupo y luego ordenamos.
‫Así que esa es exactamente la canalización que especificamos antes,
‫y ahora, para filtrar los recorridos secretos, todo lo
‫que tenemos que hacer es agregar otra etapa de
‫coincidencia justo al comienzo de esta
‫matriz de canalización, correcto, así que hagámoslo.
‫Así que hagamos eso aquí antes de
‫este registro, entonces esto. pipeline y recuerde que esto es una matriz y
‫¿cómo agregamos un elemento al comienzo de
‫una matriz?
‫Usamos unshift y, por lo tanto, es un método estándar
‫de JavaScript para matrices, también tenemos shift para agregar al final
‫de la matriz y desshift al principio de la
‫matriz, por lo que nuevamente lo que queremos agregar
‫aquí ahora es agregar solo otra etapa, muy similar a la
‫que tenemos aquí.
‫Entonces coincida y luego secretTour, no igual a verdadero.
‫Salvarlo, y este fragmento de código aquí básicamente es exactamente
‫lo que tenemos aquí, ¿verdad?
‫Básicamente, eliminar de la salida todos
‫los documentos que tienen secretTour configurado como verdadero, ¿verdad?
‫Entonces, si lo guardas ahora, veamos esto, y recuerde que ahora tenemos 11
‫recorridos, cuatro, cuatro y tres, así que verifiquemos
‫el resultado después y ahora, de hecho, uno de
‫los suyos difíciles se ha ido, así que solo ahora.
‫tenemos tres recorridos difíciles, lo que significa que
‫volvemos a tener solo 10.
‫Está bien, y de hecho podemos confirmar que nuestra gira súper
‫secreta fue una gira difícil, de acuerdo y eso ya se ha
‫ido y nuestros resultados ahora son solo
‫sobre las giras regulares no secretas, ¿de acuerdo?
‫Y podemos volver a echar un vistazo a nuestra canalización de
‫agregación ahora y aquí puede ver que ahora tenemos estas dos etapas emparejadas.
‫Genial y, como mencioné antes, no
‫hay problema en repetir estas etapas, podemos tener tantas etapas de
‫coincidencia como queramos, está bien y eso es todo para el middleware de agregación.
‫No voy a incluir ningún código postal aquí para el middleware que
‫no sea realmente necesario, y tampoco voy a
‫hablar sobre el modelo de middleware aquí porque
‫en realidad no es tan importante.
‫Muy bien, el middleware es algo realmente interesante e
‫importante que podemos agregar a nuestros modelos, y de hecho
‫hay otras cosas interesantes que podemos hacer
‫con los modelos, por ejemplo, implementar métodos de
‫instancia que son métodos que estarán disponibles en cada documento
‫después de ser consultado, y eso nuevamente
‫puede ser bastante útil, y lo
‫haremos más adelante en la
‫sección de autenticación también, de acuerdo.
‫Así que lo dejaré para un poco más
‫tarde, ahora lo que vamos a
‫hacer en esta sección para terminar es agregar algo de validación, está bien, así
‫que en los próximos dos videos hablaremos de eso.