‫Homem: Ei, você aí. Portanto, neste
‫vídeo, continuaremos trabalhando com o pipeline de agregação.
‫E eu realmente amo esse vídeo
‫porque nele vamos resolver um problema real de negócios.
‫Então, vamos imaginar que estejamos realmente desenvolvendo
‫este aplicativo para a Nature's Company.
‫E então vamos dizer que eles
‫nos pedem para implementar uma função para
‫calcular o mês mais movimentado de um determinado ano.
‫Então, basicamente, calculando quantos passeios
‫começam em cada mês do ano determinado.
‫E a empresa realmente precisa dessa
‫sintonia fina para se preparar adequadamente para esses
‫passeios, como contratar guias turísticos ou comprar o equipamento
‫e cuidar de tudo isso.
‫Portanto, este é um problema real de
‫negócios que agora podemos
‫resolver usando pipelines de agregação. OK?
‫E então, isso vai ser um verdadeiro desafio
‫e eu - espero que seja
‫muito divertido resolver esse tipo de necessidade real de negócios.
‫Pelo menos se a Nature's fosse um negócio real, eu acho.
‫Portanto, vamos começar
‫criando novamente a função.
‫Então exporte o ponto e vou chamá-lo:
‫obter plano mensal.
‫Tudo bem.
‫E, novamente, será um - um
‫método de função assíncrona, solicitar resposta ou tentar bloco de
‫cache e eu poderia simplesmente
‫copiá-lo daqui.
‫Mas não importa. Tudo bem.
‫E agora vamos implementar a rota bem
‫aqui.
‫E vou apenas duplicar esta
‫linha, então o plano mensal ...
‫E aqui este é chamado:
‫obter plano mensal. E na verdade queremos
‫poder passar um ano na URL. E então vamos usar
‫um parâmetro de URL para isso. Tudo bem.
‫Então uh ...
‫voltando aqui vamos começar
‫definindo o ano.
‫Portanto, o ano está vindo de req ponto params ponto ano.
‫Lembre-se disso e novamente
‫daquele truque para transformá-lo em um
‫número. OK?
‫Em seguida, criarei a variável
‫de plano que aguardará o agregado de pontos do tour.
‫Então, assim como antes e por
‫agora, vou deixá-lo vazio aqui.
‫E vou copiar este trecho de código
‫para enviar os resultados.
‫E este se chama plano e tudo bem.
‫Agora estamos prontos para iniciar nosso pipeline de agregação,
‫assim como fizemos no último vídeo.
‫Agora, para começar, vamos dar uma olhada
‫nos resultados completos.
‫Só para termos uma ideia
‫melhor do que realmente precisamos construir aqui.
‫Então, vamos fazer todos os tours e nos livrar completamente
‫dessa string de consulta.
‫E aqui temos todos os nove
‫tours e cada um deles, lembre-se, tem uma
‫série dessas datas de início.
‫Portanto, uma turnê começará em 25 de abril de 2021.
‫Em seguida, o próximo começa em 20 de julho e, em seguida,
‫5 de outubro. Tudo bem.
‫Então, uh, o próximo tem essa data de início
‫e todos eles, eu acredito, têm três datas de início.
‫OK? Portanto, essas datas são o
‫que realmente precisamos como ponto de partida para criar essa
‫função ou para criar esse pipeline de agregação.
‫Porque lembre-se, queremos contar quantos tours existem para cada um
‫dos meses de um determinado ano.
‫E então vamos analisar 2021, ok?
‫Temos uma turnê em abril, uma em julho e uma em outubro.
‫Então, vamos dar uma olhada no próximo passeio.
‫Aqui temos um em junho, um em julho e um em agosto.
‫Então, em julho já temos dois.
‫Então, este e este.
‫O próximo temos uh, um em março, um em maio
‫e um em junho. Então, em junho também já temos dois.
‫OK? E assim podemos continuar fazendo
‫isso manualmente, mas é claro que queremos fazer isso com nossa agregação.
‫Então, se você quiser somar
‫tudo isso, a maneira mais fácil seria basicamente fazer
‫uma turnê para cada uma dessas datas aqui, certo?
‫E podemos realmente fazer isso usando o pipeline de agregação.
‫Existe um estágio para fazer exatamente isso.
‫E isso é chamado de desenrolar.
‫Então, vamos usá-lo agora e eu irei
‫mostrar a você, uh-- o resultado disso e por que realmente precisamos dele.
‫OK? Então, novamente definimos um
‫objeto e, em seguida, o nome do palco.
‫E neste caso é: descontrair. OK?
‫E o que o desenrolamento fará é basicamente desconstruir um
‫campo de array dos documentos
‫de informação e então gerar um documento para cada elemento do array.
‫E isso é o que eu estava dizendo antes.
‫Quer dizer, basicamente, queremos ter uma turnê para
‫cada uma dessas datas na matriz. OK?
‫E esta etapa pode ser muito útil para tantos casos.
‫Portanto, o campo com a matriz que queremos desenrolar
‫são as datas de início.
‫Tudo bem e então, por enquanto, isso é realmente tudo.
‫Então, eu só quero mostrar o resultado disso agora.
‫E acho que já temos tudo pronto para
‫que isso funcione. Portanto, basta lembrar que
‫o roteiro se chama plano mensal e depois com um ano.
‫Que por agora não vai ter nenhum
‫resultado, mas hum, temos que defini-lo de qualquer maneira.
‫Portanto, plano mensal e ano de 2021.
‫Então, vamos enviar isso agora.
‫E, de fato, agora temos essa data de início não
‫mais como um array, mas apenas este primeiro elemento do
‫array que tínhamos antes.
‫Vamos colocá-los lado a lado. E então você vê, nós tínhamos
‫ou vamos fazer isso com o primeiro.
‫Então, tivemos o primeiro comprador para 25 de abril,
‫20 de julho e 5 de outubro.
‫E agora temos o primeiro alpinista nesta data aqui, então temos
‫o primeiro alpinista uh, 20 de julho, e
‫agora teremos o primeiro alpinista para 5 de outubro.
‫Então, exatamente o resultado que
‫queríamos porque agora temos um documento para cada uma das datas.
‫OK? Então, em vez de nove, agora temos 27,
‫que é nove vezes três. Tudo bem.
‫Então, esse é o primeiro encontro. Agora, vamos selecionar
‫os documentos do ano que foi aprovado.
‫OK? E lembre-se de
‫qual estágio usamos para isso, usamos match.
‫Portanto, lembre-se de que a correspondência é basicamente selecionar documentos.
‫Então, apenas para fazer uma consulta.
‫E assim o ano está nas datas de início.
‫Portanto, as datas de início são as que vamos pesquisar.
‫Datas de início, e agora o que queremos?
‫Bem, queremos que a data seja basicamente posterior a
‫1º de janeiro do ano
‫atual, digamos 2021. E queremos que seja
‫menos de 1º de janeiro de 2022, tudo bem.
‫Então, basicamente, queremos que seja 2020 e 2022. Tudo bem?
‫Então, vamos colocar isso no código agora.
‫Então, datas de início e, em seguida, precisamos
‫de outro objeto para os operadores. Portanto, maior ou igual a
‫e no MongoDB isso funciona perfeitamente bem com datas.
‫Portanto, o Mongo é realmente perfeito para trabalhar com datas,
‫como fazer comparações de datas. Então, funciona muito bem.
‫Agora precisamos definir uma nova data aqui para que
‫possa ser comparada com a data que está em cada
‫um dos documentos.
‫Portanto, a fórmula da data é ano, mês e data.
‫E então vamos fazer uma string de modelo
‫aqui e usar nossa variável de ano.
‫Então, primeiro de janeiro.
‫Então, queremos que nossa data seja maior ou
‫igual a 1º de janeiro de 2021 e vamos escrever isso aqui apenas para
‫manter isso em mente. E queremos que
‫seja menor ou podemos dizer menor que igual.
‫Vamos copiar este e então 31
‫de dezembro. OK? Então, basicamente queremos que seja entre
‫o primeiro dia do ano e o último dia
‫do ano atual. OK?
‫Portanto, vamos continuar testando-o, então vou testá-lo agora
‫após cada uma das etapas. Então mandando isso
‫e agora só devemos ter tours aqui que são em 2021.
‫Então vamos confirmar que 2021, aqui também, aqui
‫também, aqui também.
‫Mm, então você vê que realmente não temos nenhum outro ano. Direito.
‫É sempre 2021. OK? Acho que já vimos o suficiente.
‫E então, vamos voltar. A seguir é onde a mágica acontece.
‫E isso geralmente acontece na fase de grupos.
‫Então, vamos adicionar o grupo aqui, assim como antes,
‫agrupe e lembre-se de que precisamos especificar o campo ID
‫basicamente para dizer o que queremos usar para agrupar nossos documentos.
‫Agora queremos agrupá-los por meses, certo?
‫Mas atualmente temos simplesmente a data inteira, com
‫o ano, o mês, a data e até a hora.
‫Então eu acho que são 10 da manhã ou algo assim.
‫Mas, novamente, queremos apenas o mês. Deixe-me mostrar a
‫você apenas outro operador mágico do MongoDB.
‫Então, onde fica isso? Portanto, aqui, de volta a
‫esta referência, temos alguns operadores de pipeline de agregação.
‫E é aqui que temos esse operador de
‫data realmente útil. Então, vamos dar uma olhada nisso.
‫E o que vamos usar é o mês.
‫Portanto, ele retorna ao mês para uma data como um número.
‫E isso basicamente extrairá o
‫mês da nossa data. E existem muitos outros operadores.
‫Assim por exemplo, poderíamos até calcular a semana ou
‫apenas o ano, ok?
‫Mas a semana também pode ser muito útil.
‫Mas vamos uh, vamos mantê-lo com o mês. Tudo bem?
‫Então, novamente, você pode dar uma olhada nesses
‫uh - operadores de agregação especiais.
‫Porque há uma tonelada deles, como você pode ver aqui.
‫OK? Na verdade, esses operadores
‫que estamos usando aqui no pipeline de agregação são, sim, exatamente isso.
‫Eles são operadores de pipeline de agregação.
‫Temos estágios e, em seguida, operadores que podemos usar. OK.
‫E, neste caso, novamente, usamos o mês.
‫E novamente o nome do
‫campo, de onde queremos basicamente extrair a data.
‫Tudo bem, salve, então esse erro desaparece, ok.
‫Portanto, estamos agrupando agora por mês.
‫E agora a informação real
‫que queremos para cada mês é quantas viagens começam naquele mês?
‫Direito? E para isso tudo o que
‫vamos fazer é basicamente contar a quantidade de tours que têm um determinado mês, certo?
‫Então, vários tours começam.
‫E então este é realmente
‫muito semelhante ao que fizemos antes.
‫Portanto, usamos add e, para cada um dos
‫documentos, adicionamos um. Assim como fizemos antes.
‫Mas na verdade é soma e não soma, ok então, assim como aqui quando
‫contamos os passeios para cada uma das dificuldades, simplesmente adicionamos
‫o número um para cada um dos documentos.
‫E aqui fazemos o mesmo.
‫Tudo bem, então vamos testar isso novamente.
‫E já estamos muito perto do nosso resultado final.
‫E, de fato, aqui vamos nós. Portanto, temos fevereiro com uma turnê.
‫Dezembro com uma turnê, temos novembro ou, na verdade,
‫setembro com duas turnês.
‫E então temos duas turnês em tudo
‫isso aqui, na verdade, temos três turnês em julho.
‫Então, isso está chegando bem perto do nosso resultado.
‫Isso é absolutamente fantástico.
‫Então essa parte aqui, que eu acho que foi a mais
‫difícil, já está funcionando.
‫Tudo bem.
‫Agora, na verdade, queremos mais informações que
‫não sejam apenas quantos passeios, mas
‫também quais são? Então vamos fazer isso.
‫Portanto, se você quiser obter informações sobre quais passeios, isso
‫deve realmente ser uma matriz.
‫Direito? Porque de que
‫outra forma poderíamos especificar dois ou três tours diferentes em um campo, certo?
‫Então, basicamente, queremos criar um array e fazemos
‫isso usando push e, em seguida, o
‫que vamos inserir nesse array conforme cada documento
‫passa por esse pipeline é simplesmente o nome
‫do documento ou, na verdade,
‫o campo de nome. Portanto, não é o nome do documento,
‫mas o campo do nome.
‫Nesse caso, o nome do passeio. Ok, então vamos testar.
‫E...
‫bam, aqui vamos nós!
‫Portanto, agora temos também o nome dos passeios lá.
‫Tão fantastico. Vamos ver, sim. Aqui temos todos os três.
‫Em seguida, vamos mudar o nome
‫desse campo aqui, ok?
‫Agora não mudamos realmente, mas vamos simplesmente adicionar
‫outro campo que terá o mesmo valor
‫aqui para que mais tarde possamos basicamente excluir este ID.
‫Ok, e para isso vamos usar o próximo estágio que
‫é chamado: adicionar campo.
‫Portanto, adicione o campo e
‫este é bastante simples. Ele simplesmente faz o que diz.
‫Portanto, adicionar campo é usado para adicionar campos e, na
‫verdade, é chamado adicionar campos.
‫E assim agora, o nome que queremos adicionar ou o
‫campo chama-se mês e tem o valor do campo
‫com o nome ID.
‫Tudo bem. Portanto, é bastante
‫simples simplesmente o nome do campo e o valor.
‫Como de costume, precisamos usar o uh o cifrão.
‫Tudo bem, só para testar novamente.
‫Na verdade, agora temos o mês.
‫Então, a seguir, vamos realmente nos livrar disso e então
‫usamos o projeto.
‫Então, estou realmente tentando colocar o máximo de estágios aqui que posso - para
‫mostrar a vocês realmente tudo o que posso.
‫Então, como o projeto funciona? Bem, simplesmente damos a
‫cada um dos nomes de campo um zero ou um.
‫Então deixe-me mostrar isso para você. Portanto, podemos dizer ID e
‫defini-lo como zero. E isso fará com
‫que o ID não apareça mais. Se eu colocasse um
‫aqui, bem, ele iria realmente aparecer, ok?
‫Então, esse eu não vou testar. Deixe-me apenas adicionar o
‫próximo que é o tipo que eu acredito ter usado antes, mas
‫ainda quero classificá-lo aqui pelo número ou tours.
‫Ok, então agora não é 100% útil, ainda estamos perdendo porque
‫deveríamos classificá-lo por uh, realmente pelo número
‫de turnês iniciadas.
‫Então o nome do campo é o número de turnos iniciados e uh lembre-se
‫que tínhamos um antes que era para subir e menos um que
‫era para descer e é claro que é
‫o que queremos.
‫Então, começando com o número mais alto.
‫Portanto, deve ser três no nosso caso e sim, é.
‫Portanto, julho é o mês mais movimentado, com três
‫tours: Forest Hiker, Sea Explorer e Sports Lover.
‫Ok, isso está meio feito.
‫Deixe-me mostrar a você um, uh último estágio aqui que é uh,
‫não é muito útil aqui, mas eu queria mostrar
‫a você de qualquer maneira.
‫Portanto, temos o limite, e este é exatamente o mesmo que
‫o limite na consulta uh. Basicamente, isso nos
‫permitirá ter apenas seis documentos aqui.
‫Ok, então basicamente seis saídas.
‫Ok, vamos testar isso, e agora devemos ter
‫apenas seis.
‫Um, dois, três, quatro, cinco e seis. Tudo bem.
‫Novamente, não é realmente útil porque isso vai cortar os
‫seis maiores meses, o que não queremos.
‫Então, vamos simplesmente definir como 12
‫aqui, apenas para que possamos deixá-lo aqui como uma referência para você.
‫Tudo bem, mais uma vez, mas deveria estar funcionando agora e
‫o verdadeiro problema de negócios agora está resolvido.
‫E eu sei que são muitas peças móveis
‫que temos aqui. Muitos estágios diferentes.
‫E então eu sei que é muito para você entender neste momento.
‫Mas não se preocupe, você não precisa saber tudo
‫isso ao mesmo tempo.
‫Com a prática você continuará se aprimorando e
‫saberá quando usar quais das ferramentas que
‫tem à sua disposição.
‫Lembre-se de que você sempre pode ler
‫a documentação que é um material de aprendizado bem completo e
‫muito bom além deste curso, ok?
‫E isso se aplica a todas as tecnologias
‫que estamos aprendendo aqui.
‫Portanto, eu realmente encorajo você a sempre estudar a documentação.
‫E eu sei que pode ser realmente assustador olhar para ele
‫e sem este curso seria muito mais difícil aprender
‫com a documentação, mas
‫com este excelente ponto de partida
‫que você obtém nesses vídeos é muito mais
‫fácil para você manter aprendendo
‫mais e mais uh, usando essa documentação, ok?
‫Então, eu não esperava que você resolvesse esse
‫desafio sozinho, é por isso que basicamente fizemos
‫isso juntos aqui, certo?
‫Mas espero que você tenha se divertido tanto
‫quanto eu porque, novamente, eu realmente amo resolver esse tipo de problema -
‫é muito divertido, eu acho.
‫Mas de qualquer maneira, chega de falar agora.
‫No restante da seção, falaremos agora
‫sobre alguns uh, outros recursos que temos disponíveis para nós
‫no Mongo, então isso deve ser muito divertido também.