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.
// 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.
Considerando uma abordagem diferente para bancos de dados? Veja como a modelagem de dados funciona no MongoDB.
Leia a seguir
- Programação
- Programação
- base de dados
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.
Assine a nossa newsletter
Junte-se à nossa newsletter para dicas de tecnologia, análises, e-books gratuitos e ofertas exclusivas!
Clique aqui para assinar