MongoDB - Références de base de données

Comme vu dans le dernier chapitre des relations MongoDB, pour implémenter une structure de base de données normalisée dans MongoDB, nous utilisons le concept de Referenced Relationships également appelé Manual Referencesdans lequel nous stockons manuellement l'identifiant du document référencé dans un autre document. Cependant, dans les cas où un document contient des références provenant de différentes collections, nous pouvons utiliserMongoDB DBRefs.

DBRefs vs références manuelles

Comme exemple de scénario, où nous utiliserions des DBRefs au lieu de références manuelles, considérons une base de données dans laquelle nous stockons différents types d'adresses (domicile, bureau, mailing, etc.) dans différentes collections (address_home, address_office, address_mailing, etc.). Maintenant, quand unuserLe document de la collection fait référence à une adresse, il doit également spécifier la collection à examiner en fonction du type d'adresse. Dans de tels scénarios où un document fait référence à des documents de nombreuses collections, nous devrions utiliser des DBRef.

Utilisation de DBRefs

Il y a trois champs dans DBRefs -

  • $ref - Ce champ spécifie la collection du document référencé

  • $id - Ce champ spécifie le champ _id du document référencé

  • $db - Ce champ est facultatif et contient le nom de la base de données dans laquelle se trouve le document référencé

Considérez un exemple de document utilisateur avec un champ DBRef address comme indiqué dans l'extrait de code -

{
   "_id":ObjectId("53402597d852426020000002"),
   "address": {
   "$ref": "address_home",
   "$id": ObjectId("534009e4d852427820000002"),
   "$db": "tutorialspoint"},
   "contact": "987654321",
   "dob": "01-01-1991",
   "name": "Tom Benzamin"
}

le address Le champ DBRef spécifie ici que le document d'adresse référencé se trouve dans address_home collection sous tutorialspoint base de données et a un identifiant de 534009e4d852427820000002.

Le code suivant recherche dynamiquement dans la collection spécifiée par $ref paramètre (address_home dans notre cas) pour un document dont l'id est spécifié par $id paramètre dans DBRef.

>var user = db.users.findOne({"name":"Tom Benzamin"})
>var dbRef = user.address
>db[dbRef.$ref].findOne({"_id":(dbRef.$id)})

Le code ci-dessus renvoie le document d'adresse suivant présent dans address_home collection -

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