Trabajar con relaciones de datos en MongoDB

¿Cómo maneja MongoDB las relaciones entre documentos? Utilice esta guía y sus ejemplos para obtener más información.

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.

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.

// Student Document

{

"studentName": "Frodo Baggins",

"phoneNumber": "987654321",

};

// Address Document

{

"studentName": "Frodo Baggins",

"street": "Bagshot Row",

"city": "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.

En los casos en que la dirección se use junto con otros detalles, como un nombre de estudiante , deberá 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 Baggins",

"phoneNumber": "987654321",

"address": [{

"street": "Bagshot Row",

"city": "Hobiton"

}],

};

Para recuperar la dirección a través de studentName , utilice esta consulta.

db.student.findOne({"studentName":"Frodo Baggins"}, {"address":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 Baggins",

"phoneNumber": "987654321",

"address": [

{

"street": "Bagshot Row",

"city": "Hobiton"

},

{

"street": "Another Bagshot Row",

"city": "Hobiton2"

},

]

};

La consulta a continuación devolverá las direcciones del nombre del estudiante especificado.

db.student.findOne({studentName: “Frodo Baggins”}, {address: 1})

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 Baggins",

"phoneNumber": "987654321",

"address": [

ObjectId("61fa7bfeebdadf8ac71427ea"),

ObjectId("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 student = db.users.findOne({"name":"Frodo Baggins"},{"address":1})

const addresses = 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.

Sin usted, esta web no existiria. Gracias por visitarme, espero que le haya gustado y vuelva. Gracias ☺️

Articulos tematica mongodb

Fecha actualizacion el 2022-02-12. Fecha publicacion el 2022-02-12. Categoria: mongodb Autor: Oscar olg Mapa del sitio Fuente: makeuseof