Crear relación en MongoDB

En MongoDB, una relación representa cómo los diferentes tipos de documentos se relacionan lógicamente entre sí. Las relaciones como uno a uno, uno a muchos, etc., se pueden representar utilizando dos modelos diferentes:

  1. Modelo de documento incrustado
  2. Modelo de referencia

Modelo de documento incrustado: en este modelo, los documentos están incrustados dentro de un documento. Por ejemplo, tenemos dos documentos, uno es un estudiante (que contiene la información básica del estudiante, como identificación, rama de nombre) y otro es un documento de dirección (que contiene la dirección del estudiante). Entonces, en lugar de crear dos documentos diferentes, incrustamos los documentos de dirección dentro del documento del estudiante. Ayudará al usuario a recuperar los datos mediante una sola consulta en lugar de escribir un montón de consultas.

Modelo de Referencia: En este modelo, mantenemos los documentos por separado pero un documento contiene la referencia de los otros documentos. Por ejemplo, tenemos dos documentos, uno es un estudiante (que contiene la información básica del estudiante, como identificación, rama de nombre) y otro es un documento de dirección (que contiene la dirección del estudiante). Entonces, aquí el documento del estudiante contiene la referencia a idreference en general

Relaciones uno a uno con documentos incrustados

Usando documentos incrustados, podemos crear relaciones uno a uno entre los datos para que podamos recuperar datos fácilmente usando pocas operaciones de lectura. 

Ahora discutiremos la relación uno a uno con documentos incrustados con la ayuda de un ejemplo. Consideremos que tenemos dos documentos. El primer documento contiene el nombre de identificación y la sucursal del estudiante y el segundo documento contiene el detalle de la dirección permanente del estudiante.

// Student document
{
    StudentName: GeeksA,
    StudentId: g_f_g_1209,
    Branch:CSE
}

// Address document
{
    StudentName: GeeksA,
    PremanentAddress: XXXXXXX,
    City: Delhi,
    PinCode:202333
}

Ahora, si los datos de la dirección se usan con frecuencia, el usuario recupera los datos del documento de la dirección creando una consulta usando el Nombre del estudiante, pero aquí dos documentos contienen el mismo campo (es decir, StudentName), por lo que el usuario debe escribir algunas consultas más para recuperar la información requerida. Este proceso de recuperación de datos es engorroso. Entonces, incrustamos el documento de dirección en el documento del estudiante. 

{
    StudentName: GeeksA,
    StudentId: g_f_g_1209,
    Branch:CSE
    PermanentAddress:{
        PremanentAddress: XXXXXXX,
        City: Delhi,
        PinCode:202333
    } 
}

Ahora, tenemos que escribir solo una consulta para recuperar los datos requeridos. La ventaja de usar los documentos incrustados es que podemos agrupar la información requerida y mantenerla en un solo documento. Por lo tanto, es más fácil obtener los detalles en una sola llamada. Pero cuando el documento comienza a crecer, por ejemplo, agregando la información académica, la información atlética al documento anterior, se volverá más largo y llevará más tiempo recuperar los detalles. Solo cuando sea necesario, es posible que necesitemos información académica o deportiva y, por lo tanto, durante esos escenarios, es posible que debamos dividir el documento y buscar un patrón de subconjunto.. En el patrón Subconjunto, dividimos la gran cantidad de información en pequeños fragmentos para que podamos recuperar los datos fácilmente. Porque la gran suma de datos ralentiza la operación de lectura. Pero el patrón de subconjunto también tiene el inconveniente de dividir los datos en muchas colecciones pequeñas, la parte de mantenimiento de la base de datos es difícil y el seguimiento de los datos también se convertirá en una molestia.

Ejemplo:

Aquí, estamos trabajando con:

Base de datos: gfg

Colección: estudiante

Documentos: Un documento que contiene los detalles de un estudiante

Ahora mostraremos la dirección del estudiante.

db.student.find({StudentName:"GeeksA"},{"PermanentAddress.permaAddress":1}).pretty()

Relaciones de uno a muchos con documentos incrustados

Al usar documentos incrustados, podemos crear relaciones de uno a muchos entre los datos, de modo que podamos recuperar datos fácilmente con pocas operaciones de lectura. Ahora discutiremos la relación de uno a muchos con documentos incrustados con la ayuda de un ejemplo. A veces, hay posibilidades de que una persona contenga varias direcciones, como tener una dirección actual (el lugar donde se hospeda) y la dirección residencial (el lugar donde tiene su propia casa o dirección permanente). Durante ese tiempo, se produce una a muchas posibilidades de relación. Entonces, podemos usar un modelo de documento incrustado para almacenar direcciones permanentes y actuales en un solo documento

// Student document
{
    StudentName: GeeksA,
    StudentId: g_f_g_1209,
    Branch:CSE
}

// Permanent Address document
{
    StudentName: GeeksA,
    PermanentAddress: XXXXXXX,
    City: Delhi,
    PinCode:202333
}

// Current Address document
{
    StudentName: GeeksA,
    CurrentAddress: XXXXXXX,
    City: Mumbai,
    PinCode:334509
}

Ahora, en lugar de escribir tres documentos, podemos incrustarlos en un solo documento.

// Student document
{
    StudentName: GeeksA,
    StudentId: g_f_g_1209,
    Branch:CSE
    Address: [
    {
        StudentName: GeeksA,
        PermanentAddress: XXXXXXX,
        City: Delhi,
        PinCode:202333
    },
    {
        StudentName: GeeksA,
        CurrentAddress: XXXXXXX,
        City: Mumbai,
        PinCode:334509
    }
    ]
}

Como mantenemos todos los datos (incluso si hay más de 2 tipos de información de direcciones, podemos mantenerlos en una array JSON) en una sola colección, podemos consultar en una sola llamada y obtener un conjunto completo de datos, lo que lleva para obtener toda la información y no se produce ninguna pérdida.

Ejemplo:

Aquí, estamos trabajando con:

Base de datos: gfg

Colección: estudiante

Documentos: Un documento que contiene los detalles de un estudiante

Ahora mostraremos todas las direcciones del estudiante.

db.student.find({StudentName:"GeeksA"},
                {"Address.permaAddress":1,
                 "Address.currAddress":1}).pretty()

Relaciones de uno a varios con la referencia del documento

También podemos realizar una relación de uno a muchos utilizando el modelo de referencia de documento. En este modelo, mantenemos los documentos por separado pero un documento contiene la referencia de los otros documentos. 

Ahora discutiremos la relación de uno a muchos con documentos incrustados con la ayuda de un ejemplo. Consideremos que tenemos un profesor que enseña en 2 clases diferentes. Entonces, ella tiene tres documentos:

// Teacher document
{
    teacherName: Sunita,
    TeacherId: g_f_g_1209,
}

// Class 1 document
{
    TeacherId: g_f_g_1209,
    ClassName: GeeksA,
    ClassId: C_123
    Studentcount: 23,
    Subject: "Science",
}

// Class 2 document
{
    TeacherId: g_f_g_1209,
    ClassId: C_234
    ClassName: GeeksB,
    Studentcount: 33,
    Subject: "Maths",
}

Ahora, recuperar datos de estos diferentes documentos es engorroso. Entonces, aquí usamos el modelo de referencia que ayudará al maestro a recuperar datos usando una sola consulta.

// Teacher document
{
    teacherName: Sunita,
    TeacherId: g_f_g_1209,
    classIds: [
    C_123,
    C_234
    ]
}

Ahora, al usar estos classIds, el maestro de campo puede recuperar fácilmente los datos de las clases 1 y 2.

Ejemplo:

Aquí, estamos trabajando con:

Base de datos: gfg

Colección: profesor

Documentos: tres documentos que contienen los detalles de las clases.

Ahora mostraremos los valores del campo classId

db.teacher.findOne({name:"Sunita"}, {classId:1})

Publicación traducida automáticamente

Artículo escrito por priyarajtt y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *