Typegoose — Alterando Schema name e utilização do populate()

Lucas Yuri
2 min readSep 28, 2020

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

LinkedIn

GitHub

--

--