sql >> Base de Datos >  >> NoSQL >> MongoDB

Diseño de relaciones de muchos a muchos en MongoDB (en lugar de tablas relacionales)

Este es un caso de tener los datos con una relación Muchos a Muchos. Creo que hay unos pocos miles de estudiantes y unos pocos cientos de cursos en su base de datos.

Para empezar, puedo usar el siguiente diseño con los detalles del curso incrustados con cada estudiante como una matriz de subdocumentos llamados courses .

- students collection
id:
name:
courses: [ { id: 1, name: },  { id: 5, name: }, ... ]

- courses collection
id:
name:
description:

Tenga en cuenta que la identificación y el nombre del curso se almacenan en ambas colecciones. Esto es duplicación de datos. Esto debería estar bien, ya que los detalles duplicados no cambian con frecuencia (o pueden no cambiar en absoluto).

Consulta todos los cursos en los que está inscrito un estudiante, por ejemplo:db.students.find( { name: "John" } ) . Esto devolverá un documento de estudiante con el nombre coincidente y todos los cursos (el campo de matriz). Consulte db.collection.find .

Consulta a todos los estudiantes inscritos en un curso en particular:db.students.find( { "courses.name": "Java Programming" } ) . Esto devolverá todos los documentos de los estudiantes que tengan el nombre del curso que coincida con los criterios de "Programación Java". Consulte Consultar una matriz de documentos incrustados .

Además, puede usar proyección para excluir e incluir campos del resultado.

NOTAS:

  • Puede incrustar la información de los estudiantes dentro de la colección de cursos, en lugar de los cursos en los estudiantes. Las consultas serán similares a las anteriores, pero consultará la colección de cursos. Depende de su caso de uso.
  • Puede simplemente almacenar el campo de identificación del curso en la matriz de cursos, de la colección de estudiantes; este es el caso en el que tiene cambios de campo de nombre de curso a menudo. Las consultas utilizarán Agregación $lookup (una operación de "unirse") para obtener el curso y de la colección de cursos.
  • Información sobre Diseño de modelos de datos para datos MongoDB basados ​​en documentos.