Olá, Caio.
Tudo bem?
Você está correto ao pensar que, em bancos de dados não relacionais como o MongoDB, as alterações em documentos não se propagam automaticamente para outros documentos que referenciam esses dados. Isso acontece porque, ao contrário dos bancos de dados relacionais, onde podemos ter chaves estrangeiras e relacionamentos diretos, os bancos de dados NoSQL como o MongoDB são mais flexíveis e não possuem esse tipo de vínculo automático.
Para resolver essa questão e garantir que as alterações em um documento sejam refletidas em outros, você tem algumas opções:
Referenciamento Manual:
- Você pode armazenar o ID do autor no documento de livro e, sempre que precisar das informações do autor, fazer uma consulta adicional para buscar esses dados. Isso é conhecido como "referenciamento manual".
- Exemplo:
const livroSchema = new mongoose.Schema({
titulo: { type: String, required: true },
autor: { type: mongoose.Schema.Types.ObjectId, ref: 'Autor' }
});
- Quando você buscar um livro, pode usar o método
populate
do Mongoose para preencher os dados do autor:Livro.find().populate('autor').exec((err, livros) => {
// livros agora contém os dados dos autores populados
});
Eventos de Middleware do Mongoose:
Estratégia de Embedding:
- Outra abordagem é embutir (embed) os dados do autor diretamente no documento do livro. Isso pode ser útil se os dados do autor não mudarem com frequência.
- Exemplo:
const livroSchema = new mongoose.Schema({
titulo: { type: String, required: true },
autor: {
nome: String,
nacionalidade: String
}
});
Cada uma dessas abordagens tem suas vantagens e desvantagens, e a escolha depende da frequência com que os dados mudam e das necessidades específicas do seu projeto.
Espero ter ajudado e bons estudos!