Relations MongoDB

Les relations MongoDB représentent les connexions logiques entre plusieurs documents.

Les documents peuvent être liés par imbrication et référencement.

Les relations dans MongoDB peuvent être :

  • 1:1 (un à un)
  • 1: N (un à plusieurs)
  • N: 1 (plusieurs-à-un)
  • N: N (plusieurs-à-plusieurs)

Ensuite, considérons la relation entre les utilisateurs et les adresses utilisateur.

Un utilisateur peut avoir plusieurs adresses, il s'agit donc d'une relation un-à-plusieurs.

Ce qui suit estuserla structure simple du document:

{
   "_id":ObjectId("52ffc33cd85242f436000001"),
   "name": "Tom Hanks",
   "contact": "987654321",
   "dob": "01-01-1991"
}

Ce qui suit estaddressla structure simple du document:

{
   "_id":ObjectId("52ffc4a5d85242602e000000"),
   "building": "22 A, Indiana Apt",
   "pincode": 123456,
   "city": "Los Angeles",
   "state": "California"
} 

Relations intégrées

En utilisant la méthode intégrée, nous pouvons intégrer les adresses utilisateur dans le document de l'utilisateur:

{
   "_id":ObjectId("52ffc33cd85242f436000001"),
   "contact": "987654321",
   "dob": "01-01-1991",
   "name": "Tom Benzamin",
   "address": [
      {
         "building": "22 A, Indiana Apt",
         "pincode": 123456,
         "city": "Los Angeles",
         "state": "California"
      },
      {
         "building": "170 A, Acropolis Apt",
         "pincode": 456789,
         "city": "Chicago",
         "state": "Illinois"
      }]
} 

Les données ci-dessus sont stockées dans un seul document, ce qui facilite la récupération et la maintenance des données. Vous pouvez interroger l'adresse de l'utilisateur comme ceci:

>db.users.findOne({"name":"Tom Benzamin"},{"address":1})

Remarque: Dans la requête ci-dessus,dbetusersreprésentent la base de données et la collection.

L'inconvénient de cette structure de données est que si les utilisateurs et les adresses utilisateur continuent d'augmenter et que le volume de données continue de croître, cela affectera les performances de lecture et d'écriture.

Relations référencées

La relation référencée est une méthode souvent utilisée lors de la conception de bases de données. Cette méthode sépare le document de données utilisateur du document de données d'adresse utilisateur, en référençant le champiddu document pour établir la relation.

{
   "_id":ObjectId("52ffc33cd85242f436000001"),
   "contact": "987654321",
   "dob": "01-01-1991",
   "name": "Tom Benzamin",
   "address_ids": [
      ObjectId("52ffc4a5d85242602e000000"),
      ObjectId("52ffc4a5d85242602e000001")
   ]
}

Dans l'exemple ci-dessus, le champaddress_idsdu document utilisateur contient un tableau d'ObjectIds des adresses de l'utilisateur.

Nous pouvons lire ces ObjectIds d'adresse utilisateur pour obtenir les informations détaillées d'adresse de l'utilisateur.

Cette méthode nécessite deux requêtes. La première requête récupère les ObjectIds des adresses de l'utilisateur, et la seconde requête utilise les ids récupérés pour obtenir les informations détaillées d'adresse de l'utilisateur.

>var result = db.users.findOne({"name":"Tom Benzamin"},{"address_ids":1})
>var addresses = db.address.find({"_id":{"$in":result["address_ids"]}})
Autres extensions