English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Référence de base de données MongoDB

Comme vu dans le dernier chapitre sur les relations MongoDB, pour implémenter une structure de base de données normalisée dans MongoDB, nous avons utilisé le concept de relation référencée (également appelée référence manuelle), où nous stockons manuellement l'id du document référencé dans d'autres documents. Cependant, lorsque le document contient des références à des documents de différentes collections, nous pouvons utiliser MongoDB DBRefs.

DBRef par rapport à la référence manuelle

En tant que scénario d'exemple, considérons une base de données où nous stockons différents types d'adresses (domicile, bureau, courrier, etc.) dans différentes collections (address_home, address_office, address_mailing, etc.). Maintenant, lorsque le document de la collection user fait référence à une adresse, il doit également spécifier la collection à rechercher en fonction du type d'adresse. Lorsqu'un document fait référence à des documents dans plusieurs collections, nous devons utiliser DBRefs.

Utilisation de DBRef

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 −C'est un champ optionnel qui contient le nom de la base de données où se trouve le document référencé

Considérons un document utilisateur exemple avec un champ DBRefaddressComme le montre le fragment de code-

{
   "_id": ObjectId("53402597d852426020000002",
   "address": {
   "$ref": "address_home",
   "$id": ObjectId("534009e4d852427820000002",
   "$db": "w"3codebox"},
   "contact": ""987654321",
   "dob": "0"1-01-1991",
   "name": "Tom Benzamin"
}

L'adresse spécifiée par le champ DBRef de cet endroit se trouve dans w3Dans la base de données codebox, la collection address_home contient l'adresse avec l'id534009e4d8524278200000002.

Le code suivant recherche dynamiquement le document d'id spécifié par le paramètre $id dans la collection spécifiée par le paramètre $ref (dans notre exemple, address_home).

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

Le code suivant retourneaddress_homeLes documents d'adresse existants dans la collection suivante-

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