MongoDB é um banco de dados de documentos e não mantém relacionamentos entre documentos como bancos de dados relacionais como PostgreSQL.

Ainda assim, o MongoDB permite que você crie relacionamentos entre documentos. Esses relacionamentos podem ser modelados por meio de abordagens incorporadas ou referenciadas. Vamos olhar mais de perto.

Relacionamentos Embutidos vs. Relações de referência

Em uma abordagem incorporada, um documento é inserido diretamente dentro de outro documento, resultando em dados aninhados. O processo também é chamado de "desnormalização".

A abordagem de referência, por outro lado, usa referências de documentos para apontar de um documento para outro. Essa abordagem também é chamada de "normalização".

MongoDB: relacionamentos individuais com documentos incorporados

Você pode criar um relacionamento de um para um entre documentos usando a abordagem incorporada. Esse relacionamento ocorre quando um objeto de documento só pode se relacionar a um outro documento.

Considere um banco de dados de alunos. Este banco de dados contém as coleções de alunos e endereços com os seguintes documentos.

instagram viewer

// Documento do Aluno
{
"studentName": "Frodo Bolseiro",
"phoneNumber": "987654321",
};
// Documento de endereço
{
"studentName": "Frodo Bolseiro",
"street": "Fileira Bagshot",
"cidade": "Hobiton",
}

Nesse banco de dados, um aluno pode ter apenas um endereço. Para recuperar o endereço, você precisará consultar a coleção de endereços usando o nome do aluno.

Relacionado: Como criar um banco de dados e uma coleção no MongoDB

Nos casos em que o endereço é usado em conjunto com outros detalhes, como nome do aluno, você terá que consultar o banco de dados várias vezes. A desvantagem disso é um alto número de operações de leitura e, consequentemente, baixo desempenho de consulta.

Usando a abordagem incorporada, você pode inserir os dados de endereço diretamente no documento do aluno e usar apenas uma única consulta para obter os dados.

{
"studentName": "Frodo Bolseiro",
"phoneNumber": "987654321",
"Morada": [{
"street": "Fileira Bagshot",
"cidade": "Hobiton"
}],
};

Para recuperar o endereço através do nome do aluno, use esta consulta.

db.student.findOne({"studentName":"Frodo Bolseiro"}, {"endereço":1})

Relacionamentos um-para-muitos com documentos incorporados no MongoDB

Considere uma situação em que um aluno tem vários endereços. A relação entre o aluno e os endereços torna-se um-para-muitos.

O modelo incorporado permite adicionar vários endereços ao documento do aluno. Como no relacionamento um-para-um usando documentos incorporados, essa abordagem tem um desempenho de consulta relativamente alto.

{
"studentName": "Frodo Bolseiro",
"phoneNumber": "987654321",
"Morada": [
{
"street": "Fileira Bagshot",
"cidade": "Hobiton"
},
{
"street": "Outra Bagshot Row",
"cidade": "Hobiton2"
},
]
};

A consulta abaixo retornará os endereços do nome do aluno especificado.

db.student.findOne({studentName: “Frodo Bolseiro”}, {endereço: 1})

Relacionado: Como criar documentos no MongoDB

Agora, se você tiver mais endereços e continuar adicionando-os ao campo de endereço, o documento pode ficar confuso rapidamente. Uma solução é usar referências de documentos.

MongoDB: relacionamentos um-para-muitos com referências de documentos

Você também pode modelar um relacionamento um-para-muitos usando a abordagem de referência. Nesse modelo de dados, os dados do aluno e do endereço serão mantidos em coleções separadas. Para relacionar o aluno ao seu endereço, adicione um campo contendo os IDs de endereço ao documento do aluno.

{
"studentName": "Frodo Bolseiro",
"phoneNumber": "987654321",
"Morada": [
ObjectId("61fa7bfeebdadf8ac71427ea"),
ObjectId("61fa7d19ebdadf8ac71427eb")
]
};

Obter os detalhes do endereço de um aluno envolve buscar os IDs de endereço do documento do aluno e usar esses IDs para buscar os endereços reais da coleção.

const aluno = db.users.findOne({"name":"Frodo Bolseiro"},{"address":1})
endereços const = db.address.find({"_id":{"$in":student["address_ids"]}})

Escolhendo entre abordagens incorporadas e de referência

Ambos os modelos de incorporação e referência têm seus prós e contras, e você terá que considerar algumas coisas antes de fazer uma escolha. Para começar, você precisará considerar o caso de uso. Se os dados estiverem relacionados apenas a um documento, a incorporação pode ser sua melhor opção.

Para criar relacionamentos um para muitos, você pode usar o modelo de referência ou o modelo incorporado. A referência resulta em um documento limpo e consistente, pois você adiciona apenas o ID de referência do documento ao qual deseja se relacionar.

No entanto, o número de operações de leitura necessárias para recuperar os dados conectados é relativamente alto e pode afetar o desempenho. Incorporar o documento pode aumentar o desempenho, mas com muitos documentos aninhados você pode acabar com uma coleção congestionada.

A escolha de como implementar as relações de dados em seu documento depende inteiramente de você. Considere como você usará o documento, o nível de desempenho de consulta que você deseja e as trocas que deseja fazer.

Como a modelagem de dados é diferente no MongoDB?

Considerando uma abordagem diferente para bancos de dados? Veja como a modelagem de dados funciona no MongoDB.

Leia a seguir

CompartilhadoTweetE-mail
Tópicos relacionados
  • Programação
  • Programação
  • base de dados
Sobre o autor
Maria Gathoni (4 artigos publicados)

Mary Gathoni é uma desenvolvedora de software apaixonada por criar conteúdo técnico que não seja apenas informativo, mas também envolvente. Quando ela não está codificando ou escrevendo, ela gosta de sair com os amigos e estar ao ar livre.

Mais de Mary Gathoni

Assine a nossa newsletter

Junte-se à nossa newsletter para dicas de tecnologia, análises, e-books gratuitos e ofertas exclusivas!

Clique aqui para assinar