‫Instrutor: Agora, vamos preencher as avaliações
‫com os dados do usuário e do tour.
‫Assim como no tour, vamos agora fazer
‫com que tanto o tour quanto o usuário sejam
‫preenchidos automaticamente toda vez que houver uma consulta para uma revisão.
‫Como já fizemos isso antes,
‫vou lhe dar mais um desafio, ok.
‫Então, eu quero que você vá
‫em frente e faça exatamente como fizemos nas turnês, mas agora para as revisões.
‫Apenas uma dica que preciso
‫dar a você antes que você possa fazer
‫isso por conta própria, é que quando você
‫deseja preencher dois campos, é necessário chamar populate duas vezes.
‫Então, uma vez para cada um dos campos, tudo bem.
‫Com essas informações, você deve estar
‫pronto para pausar o vídeo agora e tentar.
‫Espero que não tenha sido muito difícil.
‫Vamos fechar alguns arquivos aqui, então tudo
‫que não é relacionado a revisões, não
‫precisamos mais.
‫Então, vamos apenas para o modelo de revisão e, em
‫seguida, implementar ou pré-localizar o middleware.
‫Então, fazemos isso no esquema, como você
‫já sabe, e então, novamente, usamos uma expressão regular
‫para fazer a correspondência de strings, que começam com find.
‫Então, novamente, isso vai funcionar para localizar, para
‫localizar um e todos os outros métodos de localização de um que
‫estão disponíveis no Mongoose.
‫Como sempre, começo escrevendo a seguir.
‫E agora, na verdade, tudo o que
‫precisamos fazer é chamar populate na consulta atual, então isso. preencher, e agora irei realmente
‫especificar o objeto de opções porque desejo apenas
‫selecionar alguns campos e não todo o
‫passeio, e também não o usuário inteiro.
‫Portanto, lembre-se, começamos com a propriedade path, e
‫esta será para um tour.
‫Então, novamente, ao especificar tour aqui, significa que este campo aqui,
‫que tem exatamente o mesmo nome,
‫será aquele preenchido com base em um
‫modelo de tour.
‫Bem, porque isso é o que especificamos aqui, ok.
‫Portanto, a referência é a um modelo
‫chamado tour e, basicamente, é nessa coleção onde
‫o Mongoose vai procurar documentos com o ID que especificamos.
‫Tudo bem, então queremos uma turnê, mas então vamos dizer que na
‫verdade queremos apenas o nome da turnê
‫e nada mais.
‫Então selecione, ok, e então apenas o nome e, como eu
‫disse, se quisermos preencher vários campos, tudo o que
‫precisamos fazer é chamar populate novamente.
‫Portanto, neste ponto, a consulta é preenchida com os passeios e
‫agora precisamos preenchê-la novamente, desta
‫vez com o usuário.
‫E agora selecione, e
‫isso realmente exibirá apenas o nome do usuário e a foto, e
‫não, por exemplo, coisas como o e-mail.
‫Então, digamos que
‫alguém acesse a API para obter todos
‫os comentários, mas não queremos vazar todos os
‫detalhes sobre os usuários que publicam esses comentários para o cliente.
‫Portanto, ninguém deveria realmente ser capaz de saber
‫os dados privados sobre os revisores, como e-mails, ok.
‫Então, novamente, nós apenas vazamos, apenas enviamos dados relevantes sobre o usuário,
‫e neste caso, é o nome e a foto, ok.
‫Portanto, salve isso e, se agora atingirmos ou obtivermos
‫todos os endpoint de avaliações, o tour
‫e o usuário já devem estar preenchidos, em vez de
‫apenas vermos os IDs lá.
‫Vamos tentar isso e vamos lá.
‫Então está funcionando, obtemos o nome
‫e, claro, também o ID, e o mesmo para o usuário.
‫Então, pegamos o nome, mas não a foto.
‫Então vamos ver, talvez eu não tenha especificado a propriedade
‫da foto, então vamos dar uma olhada nisso.
‫Portanto, o userModel, mas na verdade ele está lá.
‫Não, desculpe, é claro que não vemos a foto porque
‫nunca especificamos nenhuma foto para nenhum de nossos usuários.
‫Ok, portanto, a única propriedade que realmente existe é
‫o nome, e é isso que obtemos.
‫Ok, e é isso mesmo.
‫Tão muito simples, isso é tudo o que precisamos fazer
‫para obter todos os
‫dados relacionados e exatamente como especificamos em nosso modelo de dados.
‫Agora, novamente, apenas
‫tenha em mente que este vai adicionar
‫algumas consultas extras e, neste caso,
‫são na verdade duas consultas, porque
‫nos bastidores, o Mongoose terá que consultar os passeios e
‫também os usuários para encontrar o documento correspondente, ok.
‫Portanto, isso
‫provavelmente deve adicionar algum tempo aqui à consulta.
‫Portanto, demorou 266 milissegundos, assim.
‫Vamos apenas, para fins de experiência, comentar
‫este código e tentar novamente.
‫E isso está demorando muito, não sei por quê.
‫Então, vamos fazer de novo, e você vê, 157 milissegundos,
‫e se colocarmos de volta, vamos fazer de novo.
‫E, de novo, leva muito
‫tempo e, de novo, estou fazendo isso duas vezes.
‫Mas ainda assim você vê que demorou um pouco mais, ok.
‫Portanto, não o fim
‫do mundo, foram cerca de 100 milissegundos a mais,
‫mas quando você atinge uma certa
‫escala, isso pode fazer a diferença.
‫Então, novamente, eu só quero que você mantenha isso em mente.
‫De qualquer forma, é isso para esta palestra, então vamos agora seguir em frente.