1
resposta

Adicionando livro com autor string pós associação de schemas.

Olá Professora Jacqueline!

Após modificar o código para associar os schemas de livro e autor, verifiquei que o código falha ao tentarmos adicionar um novo livro passando o autor como uma string. Acredito que isso aconteça pois de fato o autor no schema livro solicita como type um schema autor. Neste caso, o projeto finalizado do jeito que está, temos que primeiro cadastrar o autor, para depois cadastrar os livros, passando o ID do autor. Gostaria de saber se existe alguma mudança que pode ser feita no código, para que o cadastro de um livro funcione também como no início do curso, ou seja, passando uma string com o nome do autor.

No schema do livro tentei fazer:

autor: {type: mongoose.Schema.Types.ObjectId || String, ref: 'autores', required: true}

... mas não deu certo haha.

1 resposta

Olá Luiz, tudo bem?

O exemplo da aula foi para mostrar que temos a opção de associar dados entre duas coleções distintas para trazer o resultado unificado na busca. O MongoDB, assim como outros bancos NoSQL, nos dá a opção de já cadastrar objetos completos em um dos seus campos, ao invés de apenas armazenar a referência (id). Esse é um grande diferencial desse tipo de banco e a maioria dos dados é de fato armazenado nesse formato.

Ou seja, ao invés de termos uma coleção separada de autores, poderíamos inclui-los dentro de livros e ter dados diferenciados para cada um deles, como por exemplo um autor com apenas o nome, outro com nome e nacionalidade, e assim por diante.

Para modificar o exemplo do projeto e conseguir cadastrar das duas formas (por String e pelo ObjectId), poderíamos utilizar um tipo de dados do mongoose que é o mongoose.Schema.Types.Mixed, que deixa o campo livre pra receber qualquer tipo de dado, porém você teria que fazer algumas alterações no seu LivroController, para que na hora de buscar o livro ele verifique se o conteúdo do campo 'autor' é um Id válido da coleção de autores ou não antes de fazer o populate. Para isso precisaríamos tratar de alguns conceitos a mais, como funções assíncronas, arrays, coisas que não abordei nesse primeiro curso.

Geralmente, ao modelar a aplicação você já vai conseguir ter uma visão do que pode estar incluído na mesma coleção e o que idealmente deverá ser separado e associado por id.

Se tiver alguma consideração ou dúvida, não deixe de nos avisar por aqui.

Bons estudos! 😄

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!