Incorporação: relações de um para poucos
Incorpore subdocumentos para dados fortemente relacionados e avalie o ganho de desempenho de leitura ao manter informações relacionadas no mesmo local.
Incorporação: relações de um para poucos é uma aula grátis de MongoDB Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de MongoDB Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de MongoDB Academy inclui 4 aulas no total.
O Que É a Incorporação de Documentos?
Incorporação significa armazenar dados relacionados diretamente dentro de um documento pai, em vez de mantê-los em uma coleção separada. Em vez de vincular duas coleções com uma chave estrangeira, você aninha os dados relacionados como um subdocumento ou uma matriz de subdocumentos. Essa é a ferramenta de design mais poderosa do MongoDB, pois permite que uma única leitura recupere o pai e todos os seus dados relacionados de uma só vez.
A Relação de Um para Poucos
Uma relação de um para poucos existe quando um documento pai tem uma quantidade pequena e limitada de itens filhos — normalmente menos de algumas dezenas. Exemplos clássicos incluem uma publicação de blog e seus comentários, um usuário e seus endereços ou um pedido e seus itens. Quando a quantidade de filhos é previsível e pequena, a incorporação quase sempre é a escolha certa.
Incorporando os Endereços de um Usuário
Considere uma coleção users na qual cada usuário tenha um ou dois endereços de entrega. Em vez de usar uma coleção addresses separada, incorpore-os diretamente. Isso significa que encontrar um usuário e seus endereços exige uma consulta, sem junções.
db.users.insertOne({
name: 'Alice',
email: 'alice@example.com',
addresses: [
{ label: 'home', street: '123 Maple St', city: 'Austin', zip: '78701' },
{ label: 'work', street: '456 Oak Ave', city: 'Austin', zip: '78702' }
]
});Lendo Dados Incorporados em uma Consulta
Quando os dados estão incorporados, você recupera o documento pai e todos os seus filhos com um único findOne. Não há necessidade de usar um $lookup nem de fazer uma segunda viagem de ida e volta ao banco de dados. Isso torna as leituras mais rápidas e simplifica o código da aplicação, pois todo o grafo de objetos chega em uma única resposta.
// Retrieve user AND their addresses in a single read
const user = await db.collection('users').findOne(
{ email: 'alice@example.com' },
{ projection: { name: 1, addresses: 1 } }
);
console.log(user.addresses); // Array of embedded address objectsAtualizando um Subdocumento Incorporado
Para atualizar um subdocumento incorporado, use o operador posicional $ ou a notação de ponto. Por exemplo, alterar o código postal do endereço residencial de Alice direciona a atualização ao elemento específico da matriz que corresponde a uma condição de filtro. As atualizações incorporadas ocorrem atomicamente no nível do documento — não é necessária uma transação.
db.users.updateOne(
{ email: 'alice@example.com', 'addresses.label': 'home' },
{ $set: { 'addresses.$.zip': '78703' } }
);Vantagem de Desempenho na Leitura
MongoDB armazena documentos como blocos BSON contíguos no disco. Quando você incorpora dados relacionados, o mecanismo lê um bloco de armazenamento em vez de fazer duas varreduras separadas de coleções. Essa co-localização dos dados relacionados é o principal motivo pelo qual documentos incorporados superam a referenciação em cargas de trabalho com muitas leituras, nas quais o pai e os filhos quase sempre são acessados juntos.
Incorporação no Mongoose
No Mongoose, você define esquemas de subdocumentos e os aninha dentro do esquema pai. O Mongoose trata matrizes incorporadas como matrizes de subdocumentos, fornecendo validação completa de tipos e ganchos de ciclo de vida para cada elemento. O modelo pai salva toda a árvore atomicamente.
const addressSchema = new mongoose.Schema({
label: String,
street: String,
city: String,
zip: String
});
const userSchema = new mongoose.Schema({
name: String,
email: String,
addresses: [addressSchema] // embedded array of sub-documents
});
const User = mongoose.model('User', userSchema);Quando a Incorporação é a Melhor Opção
A incorporação funciona melhor quando: (1) os dados filhos são sempre acessados com o pai; (2) a quantidade de filhos é pequena e limitada; (3) os filhos não precisam de um ciclo de vida independente (por exemplo, nunca são consultados ou atualizados isoladamente). Se as três condições forem verdadeiras, a incorporação quase certamente será a escolha ideal.
Limite de Tamanho do Documento
Todo documento do MongoDB tem um limite rígido de tamanho de 16 MB. Para relações de um para poucos, isso raramente é uma preocupação — um usuário com dez endereços ou um pedido com vinte itens está bem dentro do limite. No entanto, você deve monitorar o crescimento dos documentos ao longo do tempo para garantir que a incorporação não os aproxime do limite.
Incorporação versus Referenciação em Resumo
Use esta comparação rápida para orientar sua escolha:
- Incorporação: uma consulta, atualizações atômicas, quantidade pequena e limitada de filhos
- Referenciação: quantidade flexível de filhos, filhos compartilhados, consultas independentes aos filhos
Para relações de um para poucos, a incorporação vence em praticamente todos os critérios. Você evita viagens adicionais pela rede e mantém seu esquema simples.
Exemplo Prático: Tags de uma Publicação de Blog
Uma publicação de blog normalmente tem um conjunto pequeno e fixo de tags. Em vez de manter uma coleção tags separada com referências, incorpore as tags como uma matriz de strings diretamente no documento da publicação. Consultar publicações por tag é eficiente com um índice multichave no campo tags, e a leitura de uma publicação sempre retorna suas tags no mesmo documento.
db.posts.insertOne({
title: 'Getting Started with MongoDB',
body: 'MongoDB is a document database...',
tags: ['mongodb', 'nosql', 'database'],
author: 'Alice',
createdAt: new Date()
});
// Index the tags array for fast tag-based lookups
db.posts.createIndex({ tags: 1 });Verificação Rápida
Teste sua compreensão dos conceitos de MongoDB e bancos de dados NoSQL desta lição.
Recapitulação da Lição
Nesta lição, você aprendeu: a incorporação coloca dados relacionados dentro do documento pai; as relações de um para poucos se beneficiam da incorporação porque uma única leitura busca todos os dados; e o Mongoose oferece esquemas de subdocumentos para matrizes incorporadas com segurança de tipos. A seguir, exploraremos a referenciação — quando vincular documentos entre coleções em vez de aninhá-los.
Aprenda JavaScript com um tutor de IA — grátis
Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.
- Cursos
- 30
- Aulas
- 120
Perguntas Frequentes
A aula “Incorporação: relações de um para poucos” é grátis?
Sim — o texto completo de “Incorporação: relações de um para poucos” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de MongoDB Academy, atualize para CoddyKit PRO. O curso de MongoDB Academy inclui 4 aulas no total.
O que vou aprender em “Incorporação: relações de um para poucos”?
Incorpore subdocumentos para dados fortemente relacionados e avalie o ganho de desempenho de leitura ao manter informações relacionadas no mesmo local. Você pratica MongoDB Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar MongoDB Academy?
Nenhuma experiência prévia é necessária. MongoDB Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “Incorporação: relações de um para poucos”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de MongoDB Academy?
Sim. Cada aula de MongoDB Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Incorporação: relações de um para poucos
- Referências: relações de um para muitos e muitos para muitos
- O antipadrão de matrizes ilimitadas
- Estrutura para decisões de design de esquemas