‫Instrutor: até
‫agora nesta seção, falamos sobre
‫modelos do Mongoose, operações CRUD
‫com o Mongoose, fizemos muitas consultas e
‫aprendemos sobre o pipeline de agregação, mas agora
‫para os próximos dois vídeos, vamos
‫voltar aos nossos dados modelar e aprender alguns recursos superúteis
‫que o Mongoose nos oferece para modelar nossos dados.
‫E o primeiro sobre o qual
‫falaremos são as propriedades virtuais.
‫E então vamos abrir nosso modelo de tour aqui.
‫Tudo bem, agora as propriedades virtuais são basicamente campos que
‫podemos definir em nosso
‫esquema, mas que não serão persistentes.
‫Portanto, eles não serão salvos no banco de
‫dados para nos economizar algum espaço lá.
‫E na maioria das
‫vezes, é claro, queremos realmente salvar nossos dados no banco
‫de dados, mas as propriedades virtuais fazem
‫muito sentido para campos que podem ser derivados uns dos outros.
‫Por exemplo, uma conversão de milhas para quilômetros, não faz
‫sentido armazenar esses dois campos
‫em um banco de dados se pudermos
‫facilmente converter um para o outro, certo?
‫Ok, agora vamos definir uma propriedade virtual que contém
‫a duração do passeio em semanas.
‫E então esse é um
‫campo basicamente que podemos facilmente converter a partir
‫da duração que já temos em dias, certo?
‫E então é assim que funciona.
‫Definimos essas propriedades virtuais no esquema de
‫passeio e, portanto, dizemos tourSchema. virtual e, em seguida, o nome
‫da propriedade virtual.
‫Então, vamos chamá-lo de semanas de
‫duração e, em seguida, precisamos definir o método get.
‫E isso porque essa propriedade virtual aqui
‫será basicamente criada toda vez
‫que retirarmos alguns dados do banco de dados.
‫E então esta função get aqui é chamada de getter.
‫Agora, aqui, passamos uma função e, na
‫verdade, essa função
‫de retorno de chamada será uma função real, não uma função de
‫seta, e vou explicar o porquê em um segundo.
‫Agora, como definimos basicamente
‫a propriedade virtual?
‫Bem, é muito simples, tudo o que temos
‫a dizer é que queremos devolver este,. duração, neste caso, dividida
‫por sete.
‫É assim que calculamos a duração em semanas, a duração
‫em dias dividida por sete, porque há
‫sete dias na semana, e essa é
‫a duração em semanas.
‫Por exemplo, se um passeio tem sete dias,
‫é claro que será uma semana.
‫Agora, usei essa função regular aqui porque,
‫lembre-se, uma função de seta não obtém sua
‫própria palavra-chave de disco.
‫Aqui, realmente precisamos da palavra-chave disk
‫porque a palavra-chave disk, neste
‫caso, vai apontar para o documento atual.
‫E então, normalmente, quando queremos
‫usar isso, devemos sempre usar uma função regular.
‫Em qualquer lugar do Mongoose, sempre
‫estarei usando essas funções regulares com as
‫quais estamos acostumados.
‫Então, salve aqui, e é isso.
‫É assim que definimos a duração
‫das semanas, que não vai ser persistida no
‫banco de dados, mas só estará lá assim que tivermos os dados.
‫Agora, na verdade, ainda não vai estar
‫lá, porque há uma peça faltando aqui,
‫então deixe-me começar mostrando isso.
‫Portanto, se tentarmos obter todos os passeios,
‫você verá que semanas de duração não estão
‫em lugar nenhum aqui.
‫E isso porque precisamos definir explicitamente em
‫nosso esquema que queremos as propriedades virtuais em
‫nossa saída.
‫E então lembre-se de como eu disse isso a este Mangusto. esquema, podemos passar não apenas o
‫objeto com a própria
‫definição do esquema, mas também
‫um objeto para as opções do esquema.
‫E então vamos adicionar isso aqui
‫no final, então este primeiro objeto aqui é a definição do esquema,
‫e agora um objeto para as opções.
‫E o que precisamos especificar aqui são as duas propriedades
‫JSON aqui, e o que dizemos é que,
‫cada vez que os dados são realmente enviados como JSON, queremos
‫que os virtuais sejam verdadeiros.
‫Então, basicamente, os virtuais fazem parte da saída.
‫E agora estou duplicando isso porque
‫também queremos dizer para objetar.
‫Então, basicamente, quando os dados são enviados
‫como um objeto.
‫E se voltarmos aqui, poderemos ver
‫as semanas de duração.
‫Vamos esperar e, de fato, aqui está.
‫Então, são cinco dias e isso é 0. 71 semanas.
‫Aqui temos sete dias, e isso é uma semana.
‫Ok, isso realmente funciona, ótimo.
‫Agora, uma coisa que precisamos
‫ter em mente é que não podemos usar essa propriedade
‫virtual aqui em uma consulta, porque tecnicamente eles não
‫fazem parte do banco de dados.
‫Portanto, não
‫podemos dizer, por exemplo, turnê. encontre onde a duração semanas é igual a um.
‫Isso não vai funcionar, novamente porque essa propriedade
‫não faz parte do banco de dados.
‫Claro que também poderíamos ter feito essa
‫conversão toda vez que consultarmos os dados, por exemplo,
‫como em um controlador, mas
‫essa não seria a melhor prática simplesmente porque queremos
‫tentar manter a lógica de negócios e
‫a lógica do aplicativo separadas quanto possível, lembra?
‫Então essa foi toda aquela conversa sobre modelos gordos
‫e controladores finos de que falamos antes, que diz que devemos
‫ter modelos com o
‫máximo de lógica de negócios que pudermos descarregar para eles
‫e controladores finos com o
‫mínimo de lógica de negócios possível.
‫E propriedades virtuais como essa são, na verdade, um
‫bom exemplo de como podemos conseguir
‫esse tipo de arquitetura.
‫Portanto, saber a duração em semanas
‫é uma lógica de negócios porque tem a
‫ver com o próprio negócio, não com coisas como
‫solicitações ou respostas, então fazemos o cálculo certo
‫no modelo a que pertence e
‫não no controlador.