﻿1
00:00:01,100 --> 00:00:03,780
‫Instrutor: Agora vamos usar um processo

2
00:00:03,780 --> 00:00:06,610
‫chamado populate para realmente obter acesso aos

3
00:00:06,610 --> 00:00:10,173
‫guias turísticos referenciados sempre que consultarmos um determinado passeio.

4
00:00:11,820 --> 00:00:14,290
‫Então, no último vídeo, criamos uma

5
00:00:14,290 --> 00:00:17,660
‫referência para o usuário, aqui nesse campo de guias,

6
00:00:17,660 --> 00:00:20,180
‫bem no nosso modelo de passeio, certo?

7
00:00:20,180 --> 00:00:22,840
‫E agora vamos usar populate para

8
00:00:22,840 --> 00:00:25,610
‫basicamente substituir os campos que referenciamos

9
00:00:25,610 --> 00:00:28,210
‫pelos dados reais relacionados.

10
00:00:28,210 --> 00:00:30,330
‫E o resultado disso

11
00:00:30,330 --> 00:00:32,920
‫parecerá que os dados sempre estiveram

12
00:00:32,920 --> 00:00:35,100
‫embutidos, quando na verdade, como

13
00:00:35,100 --> 00:00:38,280
‫sabemos, estão em uma coleção completamente diferente, ok?

14
00:00:38,280 --> 00:00:41,940
‫Agora, o processo de preenchimento sempre acontece em uma consulta.

15
00:00:41,940 --> 00:00:44,713
‫Vamos agora para o nosso controlador de

16
00:00:46,000 --> 00:00:50,340
‫tour e, em seguida, direto para a função onde temos um único tour.

17
00:00:50,340 --> 00:00:52,460
‫Então aqui, vamos fazer o tour.

18
00:00:52,460 --> 00:00:55,440
‫E aqui está nossa consulta, certo?

19
00:00:55,440 --> 00:00:57,831
‫Portanto, é aqui que construímos nossa consulta.

20
00:00:57,831 --> 00:01:00,450
‫E agora tudo o que precisamos fazer é

21
00:01:00,450 --> 00:01:02,183
‫adicionar o populate à consulta.

22
00:01:04,370 --> 00:01:07,440
‫Então, preencha e depois o nome do campo que

23
00:01:07,440 --> 00:01:09,250
‫realmente queremos preencher e

24
00:01:10,490 --> 00:01:12,533
‫que é chamado de guias, ok?

25
00:01:13,950 --> 00:01:17,850
‫E se você pensar bem, esse nome realmente faz sentido.

26
00:01:17,850 --> 00:01:21,080
‫Então, queremos preencher basicamente para

27
00:01:21,080 --> 00:01:24,940
‫preencher o campo chamado guias em nosso modelo.

28
00:01:24,940 --> 00:01:27,870
‫Certo, então novamente, este campo de guias

29
00:01:27,870 --> 00:01:29,860
‫contém apenas a referência.

30
00:01:29,860 --> 00:01:32,620
‫e com populate vamos preencher com

31
00:01:32,620 --> 00:01:36,750
‫os dados reais, tudo bem e novamente apenas na consulta

32
00:01:36,750 --> 00:01:39,890
‫e não no banco de dados real, ok?

33
00:01:39,890 --> 00:01:41,840
‫Então, isso é realmente tudo que precisamos fazer.

34
00:01:41,840 --> 00:01:46,760
‫E agora vamos dar uma olhada no resultado, ok?

35
00:01:46,760 --> 00:01:51,760
‫Então, esse é o id do passeio e vamos lembrar que é

36
00:01:51,840 --> 00:01:55,370
‫assim que os guias estão certos agora, ok?

37
00:01:55,370 --> 00:01:59,323
‫Mas se agora vamos fazer o tour e com essa

38
00:02:01,170 --> 00:02:03,260
‫id, vamos esperar agora,

39
00:02:03,260 --> 00:02:07,220
‫e de fato, aqui estão os dados sobre os guias.

40
00:02:07,220 --> 00:02:10,720
‫Ok, então esses dois elementos que já tínhamos

41
00:02:10,720 --> 00:02:14,600
‫nos guias, agora foram preenchidos com os dados reais.

42
00:02:14,600 --> 00:02:17,373
‫E se agora dermos uma olhada em todos

43
00:02:18,550 --> 00:02:21,933
‫os tours, vamos realmente nos livrar de algumas dessas coisas aqui.

44
00:02:22,842 --> 00:02:25,073
‫Temos muitas coisas abertas aqui.

45
00:02:26,010 --> 00:02:28,423
‫Então, se agora pegarmos todos os tours,

46
00:02:29,730 --> 00:02:31,820
‫ok, vamos rolar até o final

47
00:02:31,820 --> 00:02:33,280
‫onde o novo deve

48
00:02:36,030 --> 00:02:38,590
‫estar e, aparentemente, agora está bom, oh, isso

49
00:02:38,590 --> 00:02:40,690
‫é porque eu tenho esse filtro

50
00:02:41,840 --> 00:02:46,610
‫aqui, vamos nos livrar dele, e agora eu tenho meu 10 resultados e na verdade

51
00:02:46,610 --> 00:02:49,270
‫está bem aqui, então o novo tour de teste.

52
00:02:49,270 --> 00:02:52,290
‫E agora você vê que aqui está de volta a

53
00:02:52,290 --> 00:02:55,860
‫nos mostrar apenas os valores que estão realmente no banco de dados.

54
00:02:55,860 --> 00:02:58,010
‫Então, vamos também confirmar isso aqui no Compass.

55
00:03:01,940 --> 00:03:05,200
‫E então, de fato, como você pode ver, ainda

56
00:03:05,200 --> 00:03:09,750
‫não temos os dados reais aqui no banco de dados, mas apenas os ids.

57
00:03:09,750 --> 00:03:13,290
‫Ok, e é apenas essa etapa de preenchimento que

58
00:03:13,290 --> 00:03:16,540
‫irá substituir esses ids pelos dados reais, ok?

59
00:03:16,540 --> 00:03:18,740
‫E aqui, isso não acontece

60
00:03:18,740 --> 00:03:21,260
‫bem porque não implementamos o populate

61
00:03:21,260 --> 00:03:24,200
‫no manipulador de rotas get all tours.

62
00:03:24,200 --> 00:03:27,950
‫Ok, agora deixe-me mostrar um pequeno truque que podemos

63
00:03:27,950 --> 00:03:30,490
‫fazer com a função populate.

64
00:03:30,490 --> 00:03:33,590
‫O que na verdade é apenas selecionar alguns campos.

65
00:03:33,590 --> 00:03:38,370
‫Portanto, por exemplo, não estamos interessados nesta propriedade v aqui e também

66
00:03:38,370 --> 00:03:41,350
‫não em passwordChangedAt right, então esse não é

67
00:03:41,350 --> 00:03:42,683
‫o tipo de

68
00:03:42,683 --> 00:03:45,660
‫dado que queremos sobre nossos guias turísticos.

69
00:03:45,660 --> 00:03:49,197
‫E aqui em populate, podemos realmente especificar isso.

70
00:03:49,197 --> 00:03:52,230
‫Então, ao invés de apenas passar

71
00:03:52,230 --> 00:03:55,280
‫a string, podemos criar um objeto

72
00:03:56,620 --> 00:03:57,793
‫de opções

73
00:03:59,440 --> 00:04:02,850
‫e então podemos dizer, o caminho é

74
00:04:02,850 --> 00:04:07,850
‫guias, então basicamente, o nome do campo que queremos substituir,

75
00:04:09,800 --> 00:04:11,553
‫e então, como

76
00:04:12,710 --> 00:04:16,970
‫de costume, podemos usar select , e menos, este

77
00:04:16,970 --> 00:04:21,790
‫aqui e também o outro, então passwordChangedAt, é apenas mais

78
00:04:21,790 --> 00:04:25,370
‫fácil de copiar, certo, então vamos alterá-lo

79
00:04:25,370 --> 00:04:27,603
‫aqui e enviar novamente.

80
00:04:28,600 --> 00:04:31,800
‫E esse é claro, não é o caminho

81
00:04:31,800 --> 00:04:35,910
‫certo, desculpe por isso, acho que também usei antes, na verdade,

82
00:04:35,910 --> 00:04:38,143
‫onde realmente queria mostrar este aqui,

83
00:04:39,040 --> 00:04:42,970
‫certo, e sinto muito por isso, mas ainda o que

84
00:04:42,970 --> 00:04:45,920
‫queremos nos livrar daqui é este V

85
00:04:45,920 --> 00:04:47,510
‫e esta passwordChangedAt.

86
00:04:47,510 --> 00:04:49,230
‫E já fizemos

87
00:04:49,230 --> 00:04:51,737
‫isso, se enviarmos agora, é claro

88
00:04:51,737 --> 00:04:55,810
‫que só receberemos os dados nos quais estamos interessados.

89
00:04:55,810 --> 00:04:58,540
‫Certo, então esta função popular é

90
00:04:58,540 --> 00:05:01,110
‫uma ferramenta absolutamente fundamental para trabalhar

91
00:05:01,110 --> 00:05:03,160
‫com dados no Mongoose.

92
00:05:03,160 --> 00:05:04,790
‫E, especialmente, é claro,

93
00:05:04,790 --> 00:05:06,760
‫quando há relacionamentos entre os dados,

94
00:05:06,760 --> 00:05:09,860
‫tudo bem, então você deve sempre saber exatamente como

95
00:05:09,860 --> 00:05:12,220
‫e quando usá-los em seus próprios aplicativos.

96
00:05:12,220 --> 00:05:15,040
‫E para treinarmos para isso, é claro que

97
00:05:15,040 --> 00:05:18,200
‫o usaremos muitas vezes mais ao longo desta seção.

98
00:05:18,200 --> 00:05:21,140
‫Agora, apenas uma coisa que quero que você

99
00:05:21,140 --> 00:05:24,280
‫tenha em mente é que, nos bastidores, usar populate

100
00:05:24,280 --> 00:05:26,300
‫ainda criará uma nova

101
00:05:26,300 --> 00:05:29,290
‫consulta e, portanto, isso pode afetar seu desempenho.

102
00:05:29,290 --> 00:05:31,985
‫Ok, é claro que se você fizer isso

103
00:05:31,985 --> 00:05:35,430
‫apenas uma ou duas vezes e em um tipo de aplicativo pequeno,

104
00:05:35,430 --> 00:05:38,170
‫essa pequena queda no desempenho não será grande coisa.

105
00:05:38,170 --> 00:05:40,944
‫Mas em um aplicativo enorme, com toneladas de

106
00:05:40,944 --> 00:05:43,469
‫população por todo o lugar, isso

107
00:05:43,469 --> 00:05:46,450
‫pode realmente ter algum tipo de efeito, certo?

108
00:05:46,450 --> 00:05:47,960
‫Portanto, apenas tenha isso em mente.

109
00:05:47,960 --> 00:05:51,430
‫Ok, realmente faz sentido, porque de que outra forma

110
00:05:51,430 --> 00:05:54,700
‫o Mongoose seria capaz de obter dados sobre

111
00:05:54,700 --> 00:05:57,700
‫passeios e usuários ao mesmo tempo.

112
00:05:57,700 --> 00:06:01,050
‫Ele precisa criar uma nova consulta basicamente

113
00:06:01,050 --> 00:06:03,960
‫para poder criar essa conexão.

114
00:06:03,960 --> 00:06:06,060
‫Ok e agora apenas para terminar isso,

115
00:06:06,060 --> 00:06:07,763
‫vamos lembrar o que eu

116
00:06:07,763 --> 00:06:11,610
‫mostrei a vocês que isso realmente não funcionou quando recebemos todos os tours.

117
00:06:11,610 --> 00:06:15,460
‫Portanto, lembre-se de como, nessa situação, ainda simplesmente obtemos

118
00:06:15,460 --> 00:06:18,620
‫os ids dos guias turísticos e não os

119
00:06:18,620 --> 00:06:20,850
‫dados do usuário referenciados.

120
00:06:20,850 --> 00:06:24,050
‫Ok, e uma solução seria basicamente copiar

121
00:06:24,050 --> 00:06:27,956
‫esse código aqui, essa função popular, também aqui neste

122
00:06:27,956 --> 00:06:30,950
‫manipulador de rota, mas é

123
00:06:30,950 --> 00:06:34,390
‫claro, código duplicado nunca é uma boa ideia.

124
00:06:34,390 --> 00:06:35,635
‫E espero que

125
00:06:35,635 --> 00:06:39,640
‫você já saiba neste momento uma maneira melhor de fazer isso.

126
00:06:39,640 --> 00:06:42,310
‫E a resposta é middleware de consulta.

127
00:06:42,310 --> 00:06:46,833
‫Ok, então vamos avançar rapidamente e passar para o nosso modelo, e

128
00:06:47,910 --> 00:06:49,620
‫estou copiando este código

129
00:06:51,731 --> 00:06:55,253
‫aqui agora e então, sim, vamos fazer isso aqui.

130
00:06:57,580 --> 00:06:58,413
‫Então,

131
00:06:59,430 --> 00:07:03,460
‫um pré e, na verdade, como antes, faço isso

132
00:07:03,460 --> 00:07:06,640
‫com uma expressão regular, que funcionará para

133
00:07:06,640 --> 00:07:09,363
‫tudo que começa com find.

134
00:07:11,830 --> 00:07:13,083
‫Então, assim,

135
00:07:17,010 --> 00:07:21,500
‫ok, e é claro, fazemos isso no middleware de consulta, bem porque,

136
00:07:21,500 --> 00:07:23,820
‫esse é o tipo de middleware

137
00:07:23,820 --> 00:07:27,000
‫que será executado toda vez que houver uma consulta.

138
00:07:27,000 --> 00:07:30,540
‫Certo, vamos apenas colocar todos esses middlewares pré-juntos

139
00:07:32,180 --> 00:07:34,943
‫e, depois disso, ter o pós-um.

140
00:07:37,230 --> 00:07:42,230
‫Tudo bem, deixe-me copiar o código que tínhamos antes e agora vamos

141
00:07:42,660 --> 00:07:45,410
‫apenas adicioná-lo a isso, porque lembre-se

142
00:07:45,410 --> 00:07:47,620
‫que no middleware de

143
00:07:47,620 --> 00:07:50,810
‫consulta, isso sempre aponta para a consulta atual.

144
00:07:50,810 --> 00:07:53,760
‫E agora, basicamente, todas as consultas

145
00:07:53,760 --> 00:07:56,560
‫preencherão automaticamente o campo de guias

146
00:07:56,560 --> 00:07:58,740
‫com o usuário referenciado.

147
00:07:58,740 --> 00:08:02,053
‫Ok, agora podemos nos livrar dele aqui.

148
00:08:05,040 --> 00:08:07,770
‫E sim, é realmente isso.

149
00:08:07,770 --> 00:08:09,720
‫Portanto, agora fazemos isso aqui,

150
00:08:09,720 --> 00:08:12,040
‫em vez de em dois lugares, no controlador.

151
00:08:12,040 --> 00:08:15,200
‫E então este é um pequeno truque, caso você

152
00:08:15,200 --> 00:08:17,713
‫sempre queira preencher todos os seus documentos.

153
00:08:19,130 --> 00:08:20,923
‫Então, vamos testar.

154
00:08:21,940 --> 00:08:23,993
‫Primeiro, se ainda funcionar aqui.

155
00:08:24,840 --> 00:08:27,553
‫E realmente funciona, então temos nossos dois usuários.

156
00:08:28,530 --> 00:08:32,120
‫E então vamos testar aqui onde não funcionou

157
00:08:32,120 --> 00:08:36,060
‫antes e agora funciona, então aqui está o resultado disso.

158
00:08:36,060 --> 00:08:38,790
‫E agora, apenas para ter certeza

159
00:08:38,790 --> 00:08:43,384
‫de que realmente funciona, vamos atualizá-lo e basicamente adicionar outro guia turístico.

160
00:08:43,384 --> 00:08:48,320
‫Então, vamos copiar o id do tour aqui e atualizar o tour,

161
00:08:49,300 --> 00:08:51,160
‫então precisamos colocar o

162
00:08:51,160 --> 00:08:55,563
‫id aqui, e então no corpo vamos pegá-lo em create tour,

163
00:08:58,140 --> 00:08:59,433
‫então este

164
00:09:02,040 --> 00:09:04,360
‫guia, e colocar isso aqui, e

165
00:09:04,360 --> 00:09:07,410
‫então também precisamos pegar nosso outro usuário.

166
00:09:07,410 --> 00:09:10,960
‫Então, é este aqui, que na verdade não é um

167
00:09:10,960 --> 00:09:14,710
‫guia nem mesmo um administrador, mas ainda assim é apenas para

168
00:09:14,710 --> 00:09:16,933
‫teste, então vamos pegar esse

169
00:09:19,450 --> 00:09:22,423
‫id, e então ir em frente e colocá-lo aqui.

170
00:09:24,090 --> 00:09:28,640
‫Então, vamos atualizá-lo, isso ainda funciona, e agora na

171
00:09:28,640 --> 00:09:31,070
‫verdade, mesmo nesta

172
00:09:31,070 --> 00:09:34,130
‫saída, já temos os dados preenchidos.

173
00:09:34,130 --> 00:09:36,410
‫Ok, porque em nossa expressão regular lembre-se

174
00:09:36,410 --> 00:09:38,300
‫de que usamos find.

175
00:09:38,300 --> 00:09:42,450
‫E então, esta atualização aqui é implementada usando find by id

176
00:09:42,450 --> 00:09:45,465
‫e update, e por isso também começa com

177
00:09:45,465 --> 00:09:49,110
‫find e, portanto, o middleware de consulta que éramos antes

178
00:09:49,110 --> 00:09:51,690
‫também se aplica a esta função.

179
00:09:51,690 --> 00:09:55,440
‫Ok e então, é assim que o preenchimento funciona.

180
00:09:55,440 --> 00:09:58,640
‫Ok, então novamente, ferramenta extremamente importante em sua caixa

181
00:09:58,640 --> 00:10:01,200
‫de ferramentas do Mongoose, tudo bem.

182
00:10:01,200 --> 00:10:02,910
‫E só para ter

183
00:10:02,910 --> 00:10:05,770
‫certeza, vamos usar 15 segundos aqui para recapitular.

184
00:10:05,770 --> 00:10:08,700
‫Portanto, este é um processo de duas etapas.

185
00:10:08,700 --> 00:10:12,080
‫Primeiro, você cria uma referência a outro modelo.

186
00:10:12,080 --> 00:10:14,680
‫E assim, com isso, você cria efetivamente

187
00:10:14,680 --> 00:10:17,410
‫o relacionamento entre esses dois conjuntos de dados.

188
00:10:17,410 --> 00:10:20,349
‫Em seguida, na segunda etapa, você preenche

189
00:10:20,349 --> 00:10:23,010
‫o campo que acabou de

190
00:10:23,010 --> 00:10:26,920
‫especificar antes, para orientar usando o método de preenchimento.

191
00:10:26,920 --> 00:10:30,350
‫Tudo bem, muito simples, muito direto, tudo que você precisa é

192
00:10:30,350 --> 00:10:32,330
‫realmente entender a lógica por

193
00:10:32,330 --> 00:10:34,620
‫trás de tudo isso e então

194
00:10:34,620 --> 00:10:37,163
‫você está pronto para realmente começar a usá-lo.

