Typegoose — Alterando Schema name e utilização do populate()
Fala galera 👋, nesse tutorial irei ensinar como alterar o nome de um Schema, referência-lo e usar o método Populate no Typegoose.
Considerações: O método Populate tem como intuito “popular” o campo de referência de um Schema com os elementos do Schema referenciado. Ele se assemelha ao JOIN em banco de dados SQL.
Então vamos lá, primeiramente vamos alterar o nome do schema:
Abaixo temos o exemplo de um simples schema, que quando criado terá o seguinte nome no banco de dados: documenttype.
Agora, para alterar seu nome de criação:
- adicionamos o decorator modelOpitions
- em customName, definimos o nome que desejamos.
Pronto, agora nosso schema será criado com um nome personalizado.
Vamos então criar o Schema com a referência para nossa tabela e que em queries futuras será populada:
Usando a propriedade ref na definição da propriedade, conseguimos então fazer o relacionamento entre as duas tabelas.
Com a parte de Schema e referência finalizados, podemos então realizar a query no Document Schema, usando o método populate para que venha a Referência de DocumentType:
Teoricamente, essa query deveria retornar nosso document populado, apenas passando o parâmetro ‘type’ (nome do campo que referencia) no método populate.
Contudo, como alteramos o nome do Schema referenciado, o typegoose não consegue captar isso automaticamente e para isso temos que realizar a query da seguinte maneira:
Perceba que a alteração necessária é passar como parâmetro na função populate um objeto contendo as informações path: o nome do campo que referencia, e model: o modelo referenciado.
Essa alteração é necessária, pois caso o parâmetro model não fosse passado, o typegoose iria buscar a tabela documenttype (o nome padrão que nosso Schema seria criado) no banco de dados, mas como esse nome foi alterado, ele não iria encontrar. Passando então o model como parâmetro, ele consegue achar a tabela correta e retornar perfeitamente nossa query.
Por hoje é só pessoal 👋🏼, comenta aqui embaixo o que você achou e se eu te ajudei de alguma maneira em seu projeto 😉.
Até a próxima!
Lucas Yuri — Full Stack Developer