English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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.
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.
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 DBRefaddress
Comme 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_home
Les documents d'adresse existants dans la collection suivante-
{ "_id" : ObjectId("534009e4d852427820000002", "building" : ""22 A, Indiana Apt", "pincode" : 123456, "city" : "Los Angeles", "state" : "California" }