1
resposta

API Rest, atualização dos dados de Autor dentro do GET da Livraria (Curso de Node.JS)

Boa tarde,

Eu estou enfrentando um problema e gostaria de saber se alguém sabe como solucionar. Eu finalizei agora o curso de Node, e uma das etapas finais foi criar rotas para autores e vincular a coleção autores à coleção livros, como na imagem abaixo:

Tabela JSON com os dados do livro Enigma do Medo
Vamos ao problema! Quando eu utilizo o método PUT para alterar por exemplo a nacionalidade do autor, dentro da coleção /autores, ele funciona somente para a coleção autores, mas continua desatualizado nos livros que fazem referência a este autor por id. Como posso configurar para que essas alterações nos sub-grupos sejam automatizadas em todas as coleções que referenciam ele?

Desde já, muito obrigado.

1 resposta

Olá, Bruno! Como vai?

Para resolver o problema de atualização automática dos dados de autor em todas as coleções que referenciam esse autor, você pode adotar algumas abordagens. Aqui estão algumas sugestões:

  1. Referenciamento vs. Embedding:

    • Referenciamento: Se o autor é referenciado por ID nos livros, você pode manter a informação centralizada na coleção de autores. Quando precisar dos dados do autor, faça um populate no MongoDB para buscar as informações atualizadas.
    • Embedding: Se a informação do autor está embutida nos documentos de livros, você precisará atualizar manualmente cada livro que contém o autor.
  2. Atualização Manual:

    • Após atualizar o autor na coleção de autores, faça uma operação de atualização em massa (updateMany) nos livros que contêm esse autor. Você pode usar o ID do autor para encontrar todos os livros que precisam ser atualizados.
    const autorId = "688e5574d9bf63dbeea28f86";
    const novaNacionalidade = "Nova Nacionalidade";
    
    // Atualize a coleção de autores
    await Autores.updateOne(
      { _id: autorId },
      { $set: { nacionalidade: novaNacionalidade } }
    );
    
    // Atualize todos os livros que referenciam esse autor
    await Livros.updateMany(
      { "autor._id": autorId },
      { $set: { "autor.nacionalidade": novaNacionalidade } }
    );
    
  3. Hooks ou Middlewares:

    • Utilize middlewares do Mongoose para escutar mudanças na coleção de autores e automaticamente propagar essas mudanças para a coleção de livros.
  4. Eventos do Banco de Dados:

    • Se estiver usando uma versão do MongoDB que suporta Change Streams, você pode escutar eventos de alteração na coleção de autores e reagir a essas mudanças atualizando os livros.

Escolher a abordagem certa depende do seu caso de uso e da estrutura do seu banco de dados.

Espero ter ajudado e bons estudos!

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