MongoDB es una base de datos de documentos y no mantiene relaciones entre documentos como bases de datos relacionales como PostgreSQL.
Aún así, MongoDB le permite crear relaciones entre documentos. Estas relaciones se pueden modelar a través de enfoques incrustados o referenciados. Miremos más de cerca.
Relaciones incrustadas vs. Relaciones de referencia
En un enfoque incrustado, un documento se inserta directamente dentro de otro documento, lo que da como resultado datos anidados. El proceso también se llama "desnormalización".
El enfoque de referencia, por otro lado, utiliza referencias de documentos para señalar de un documento a otro. Este enfoque también se denomina "normalización".
MongoDB: relaciones uno a uno con documentos incrustados
Puede crear una relación uno a uno entre documentos utilizando el enfoque incrustado. Esta relación ocurre cuando un objeto de documento solo puede relacionarse con otro documento.
Considere una base de datos de estudiantes. Esta base de datos contiene las colecciones de estudiantes y direcciones con los siguientes documentos.
// Documento del estudiante
{
"studentName": "Frodo Bolsón",
"número de teléfono": "987654321",
};
// Documento de dirección
{
"studentName": "Frodo Bolsón",
"calle": "fila de balas",
"ciudad": "Hobiton",
}
En esta base de datos, un estudiante puede tener solo una dirección. Para recuperar la dirección, deberá consultar la recopilación de direcciones utilizando el nombre del estudiante.
Relacionado: Cómo crear una base de datos y una colección en MongoDB
En los casos en que la dirección se utilice junto con otros detalles, como un nombre del estudiante, tendrá que consultar la base de datos varias veces. La desventaja de esto es una gran cantidad de operaciones de lectura y, en consecuencia, un bajo rendimiento de consulta.
Usando el enfoque incrustado, puede insertar los datos de la dirección directamente en el documento del estudiante y usar solo una consulta para obtener los datos.
{
"studentName": "Frodo Bolsón",
"número de teléfono": "987654321",
"habla a": [{
"calle": "fila de balas",
"ciudad": "Hobiton"
}],
};
Para recuperar la dirección a través del nombre del estudiante, utilice esta consulta.
db.student.findOne({"studentName":"Frodo Baggins"}, {"dirección":1})
Relaciones de uno a muchos con documentos incrustados en MongoDB
Considere una situación en la que un estudiante tiene varias direcciones. La relación entre el alumno y las direcciones se convierte en uno a muchos.
El modelo incrustado le permite agregar múltiples direcciones al documento del estudiante. Al igual que en la relación uno a uno que utiliza documentos incrustados, este enfoque tiene un rendimiento de consulta relativamente alto.
{
"studentName": "Frodo Bolsón",
"número de teléfono": "987654321",
"habla a": [
{
"calle": "fila de balas",
"ciudad": "Hobiton"
},
{
"street": "Otra fila Bagshot",
"ciudad": "Hobiton2"
},
]
};
La consulta a continuación devolverá las direcciones del nombre del estudiante especificado.
db.student.findOne({studentName: "Frodo Baggins"}, {dirección: 1})
Relacionado: Cómo crear documentos en MongoDB
Ahora, si tiene más direcciones y sigue agregándolas al campo de dirección, el documento puede abarrotarse con bastante rapidez. Una solución es usar referencias de documentos.
MongoDB: relaciones de uno a muchos con referencias de documentos
También puede modelar una relación de uno a muchos utilizando el enfoque de referencia. En este modelo de datos, los datos del estudiante y de la dirección se mantendrán en colecciones separadas. Para relacionar al estudiante con su dirección, agregue un campo que contenga los ID de dirección al documento del estudiante.
{
"studentName": "Frodo Bolsón",
"número de teléfono": "987654321",
"habla a": [
IdObjeto("61fa7bfeebdadf8ac71427ea"),
ID de objeto ("61fa7d19ebdadf8ac71427eb")
]
};
Obtener los detalles de la dirección de un estudiante implica obtener las identificaciones de dirección del documento del estudiante y usar esas identificaciones para obtener las direcciones reales de la colección.
const estudiante = db.users.findOne({"nombre":"Frodo Bolsón"},{"dirección":1})
const direcciones = db.address.find({"_id":{"$in":student["address_ids"]}})
Elección entre enfoques integrados y de referencia
Tanto el modelo de incrustación como el de referencia tienen sus pros y sus contras, y tendrá que considerar un par de cosas antes de tomar una decisión. Para empezar, deberá considerar el caso de uso. Si los datos solo estarán relacionados con un documento, la incrustación podría ser su mejor opción.
Para crear relaciones de uno a varios, puede utilizar el modelo de referencia o el modelo incrustado. La referencia da como resultado un documento limpio y consistente, ya que solo agrega la ID de referencia del documento con el que desea relacionarse.
Sin embargo, la cantidad de operaciones de lectura requeridas para recuperar los datos conectados es relativamente alta y puede afectar el rendimiento. Incrustar el documento puede aumentar el rendimiento, pero con muchos documentos anidados puede terminar con una colección congestionada.
Por lo tanto, elegir cómo implementar las relaciones de datos en su documento depende totalmente de usted. Considere cómo usará el documento, el nivel de rendimiento de consulta al que aspira y las concesiones que está dispuesto a hacer.
¿Está considerando un enfoque diferente para las bases de datos? Así es como funciona el modelado de datos en MongoDB.
Leer siguiente
- Programación
- Programación
- base de datos

Mary Gathoni es una desarrolladora de software apasionada por crear contenido técnico que no solo sea informativo sino también atractivo. Cuando no está codificando o escribiendo, le gusta salir con amigos y estar al aire libre.
Suscríbete a nuestro boletín
¡Únase a nuestro boletín para obtener consejos técnicos, reseñas, libros electrónicos gratuitos y ofertas exclusivas!
Haga clic aquí para suscribirse