Il s'agit d'avoir des données avec une relation plusieurs à plusieurs. Je pense qu'il y a quelques milliers d'étudiants et quelques centaines de cours dans votre base de données.
Pour commencer, je peux utiliser la conception suivante avec les détails du cours intégrés à chaque étudiant sous la forme d'un tableau de sous-documents appelés courses
.
- students collection
id:
name:
courses: [ { id: 1, name: }, { id: 5, name: }, ... ]
- courses collection
id:
name:
description:
Notez que l'identifiant et le nom du cours sont stockés dans les deux collections. C'est la duplication des données. Cela devrait être correct, car les détails dupliqués ne changent pas souvent (ou peuvent ne pas changer du tout).
Interroger tous les cours auxquels un étudiant est inscrit, par exemple :db.students.find( { name: "John" } )
. Cela renverra un document étudiant avec le nom correspondant et tous les cours (le champ tableau). Voir db.collection.find
.
Interroger tous les étudiants inscrits à un cours particulier :db.students.find( { "courses.name": "Java Programming" } )
. Cela renverra tous les documents étudiants dont le nom de cours correspond au critère "Programmation java". Voir Interroger un tableau de documents intégrés
.
De plus, vous pouvez utiliser la projection exclure et inclure champs du résultat.
REMARQUES :
- Vous pouvez intégrer des informations sur les étudiants dans la collection de cours, au lieu des cours dans les étudiants. Les requêtes seront similaires à celles ci-dessus, mais vous interrogerez la collection courses. Cela dépend de votre cas d'utilisation.
- Vous pouvez simplement stocker le champ d'identification du cours dans le tableau courses de la collection des étudiants ; c'est le cas où le champ du nom du cours change souvent. Les requêtes utiliseront l'agrégation $lookup (une opération "joindre") pour obtenir le cours et à partir de la collection de cours.
- Informations sur Conception de modèles de données pour les données MongoDB basées sur des documents.