‫Jonas: Aprendemos sobre o middleware
‫de documento e consulta, e agora o último
‫middleware sobre o qual falaremos é o middleware de
‫agregação e, como você
‫provavelmente pode adivinhar, o middleware
‫de agregação nos permite adicionar ganchos antes ou depois de
‫uma agregação acontecer,
‫e assim vamos agora continuar com nosso exemplo anterior onde escondemos
‫os passeios secretos das consultas, agora em uma agregação os
‫passeios secretos ainda estão sendo usados, certo?
‫Portanto, vamos confirmar rapidamente
‫isso, por exemplo, aqui em nossas estatísticas do tour
‫get, então foi onde usamos a
‫primeira agregação e você vê que
‫temos quatro tours aqui, quatro no fácil
‫e três no médio e isso perfaz 11, mas
‫já saiba que, na verdade, queremos apenas 10 tours.
‫Portanto, há 10 tours que não
‫são secretos e um que é secreto, e agora
‫temos todos esses 11 tours aqui e,
‫basicamente, queremos excluir o tour secreto do agregado.
‫Então, como poderíamos fazer isso?
‫Bem, vamos dar uma olhada
‫em onde nossa agregação está realmente acontecendo, então está aqui embaixo, sim, em obter
‫as etapas do tour, e então o que podemos fazer é aqui
‫neste estado de correspondência simplesmente excluir os tours secretos
‫que são verdadeiros, certo?
‫Isso seria muito fácil de
‫adicionar aqui, mas teríamos que adicionar
‫a mesma coisa aqui na outra agregação que
‫temos, e se tivéssemos ainda mais agregações,
‫teríamos que adicionar isso em todas elas e isso
‫é claro que não é uma boa
‫ideia, porque, por exemplo, podemos esquecer de fazer isso
‫e também é apenas código repetitivo, então vamos simplesmente excluí-lo no nível do
‫modelo, tudo bem, então vamos adicionar middleware de agregação aqui começando com
‫um comentário.
‫Portanto, middleware de agregação e assim como
‫antes, temos tourSchema. pré, então queremos que isso aconteça antes
‫que a agregação seja
‫realmente executada e aqui usamos o gancho de agregação.
‫Tudo bem e então nossa função, que
‫novamente aceita a próxima função, chamando o próximo middleware.
‫Tudo bem, então vamos começar dando uma olhada nisso, então
‫lembre-se de que aqui no middleware de consulta esse
‫objeto aponta para a consulta atual.
‫Então, aqui no middleware de documento, esse objeto
‫aponta para o documento
‫atual e, aqui embaixo, no middleware de agregação,
‫isso vai apontar para o objeto de agregação atual.
‫Ok, vamos dar uma olhada nisso no
‫console, mas antes disso, deixe-me remover este log aqui.
‫Tudo bem, salve, execute esta agregação aqui e está
‫demorando muito, então vamos cancelar e voltar e
‫isso é provavelmente porque não estamos
‫chamando em seguida aqui, e como já sabemos, ficamos presos
‫na função de
‫middleware e isso não é bom.
‫Então, vamos tentar de novo agora enviar, e
‫sim, agora estamos de volta e agora vamos dar uma
‫olhada no objeto de agregação.
‫Ok, então há um monte
‫de coisas aqui, então não é realmente interessante aqui e eu
‫realmente não consigo encontrar o que estou tentando mostrar a
‫vocês aqui, então vamos simplesmente adicionar isso. pipeline está bem porque o que
‫eu realmente queria mostrar a vocês é apenas o objeto pipeline.
‫Ok, e na verdade é um pipeline assim, então é
‫na verdade uma função, um método.
‫Então, vamos limpar o console aqui.
‫Tente de novo, e aqui obtemos o pipeline de agregação, que é
‫simplesmente o array que passamos para a
‫função de agregação antes.
‫Certo, então vamos dar uma olhada
‫e aqui temos aquele array, este não este.
‫Portanto, temos a correspondência para
‫o grupo e, em seguida, a classificação, se dermos
‫uma olhada aqui no console, temos de fato nossa correspondência com a
‫média de classificações que temos agrupar e, em seguida, classificar.
‫Esse é exatamente o pipeline que especificamos antes, e
‫agora, para filtrar os tours secretos, tudo o que
‫precisamos fazer é adicionar outro estágio de correspondência
‫bem no início dessa matriz de
‫pipeline, certo e vamos fazer exatamente isso.
‫Então vamos fazer isso aqui antes
‫deste log, então isso. pipeline e lembre-se de que esta é uma matriz
‫e como adicionamos um elemento no início de
‫uma matriz?
‫Usamos unshift e, portanto, esse é um método JavaScript
‫padrão para arrays, também temos que mudar para adicionar no
‫final do array e unshift no início do
‫array, e novamente o que queremos adicionar aqui
‫agora é apenas adicionar outro estágio, muito parecido com o
‫que temos aqui.
‫Portanto, combine e, em seguida, secretTour, diferente de true.
‫Salve-o e, portanto, este código aqui basicamente é exatamente
‫o que temos aqui, certo?
‫Basicamente removendo da saída todos
‫os documentos que têm secretTour definido como verdadeiro, certo?
‫Então, se você salvar agora, vamos verificar e lembrar que temos agora
‫11 tours, quatro, quatro e três, então
‫vamos verificar o resultado depois e agora de fato
‫um dos seus difíceis se foi, então só agora
‫temos três turnês difíceis, o que significa que
‫voltamos a ter apenas 10.
‫Ok e na verdade podemos confirmar que nossa turnê super
‫secreta foi uma turnê difícil, certo e isso agora acabou
‫e nossos resultados agora são apenas
‫sobre as turnês não secretas regulares, certo?
‫E podemos novamente dar uma olhada em nosso pipeline de agregação
‫agora e aqui você vê que agora temos esses dois estágios correspondentes.
‫Ótimo e, como mencionei antes,
‫não há problema em repetir esses estágios, podemos ter quantos
‫estágios de correspondência quisermos, ok e é isso para o middleware de agregação.
‫Não vou incluir nenhum código postal aqui para middleware que não
‫seja realmente necessário, e também não vou
‫falar sobre middleware de modelo aqui porque ele
‫realmente não é tão importante.
‫Tudo bem, então o middleware é algo muito legal
‫e importante que podemos adicionar aos nossos modelos, e há
‫de fato outras coisas legais que podemos
‫fazer com os modelos, por exemplo, implementar métodos
‫de instância que são métodos que estarão disponíveis em
‫todos os documentos após serem consultado, e
‫isso novamente pode ser muito útil,
‫e faremos isso mais
‫tarde na seção de autenticação também.
‫Vou deixar isso um pouco mais tarde,
‫agora o que vamos fazer
‫nesta seção apenas para terminar é realmente adicionar alguma validação, certo e
‫nos próximos dois vídeos vamos falar sobre isso.