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

MongoDB-Datenbank-Referenz

Wie im letzten Kapitel über Beziehungen in MongoDB gesehen wurde, um eine normierte Datenbankstruktur in MongoDB zu erreichen, haben wir das Konzept der referenzierten Beziehung (auch als manuelle Referenz bezeichnet) verwendet, bei dem wir den id des referenzierten Dokuments manuell in anderen Dokumenten speichern. Aber wenn Dokumente Referenzen aus verschiedenen Sammlungen enthalten, können wir MongoDB verwenden DBRefs.

DBRef im Vergleich zu manueller Referenz

Als Beispiel für eine Szenario, in dem wir DBRef anstatt manueller Referenz verwenden, betrachten wir eine Datenbank, in der wir verschiedene Arten von Adressen (Heim, Büro, Post etc.) in verschiedenen Sammlungen (address_home, address_office, address_mailing etc.) speichern. Jetzt, wenn Dokumente der user-Sammlung Adressen referenzieren, müssen sie auch die Sammlung spezifizieren, in der die Adresse gesucht werden soll. Bei Dokumenten, die Dokumente in mehreren Sammlungen referenzieren, sollten wir DBRefs verwenden.

DBRef verwenden

DBRefs haben drei Felder-

  • $ref −Dieses Feld spezifiziert die Sammlung des referenzierten Dokuments

  • $id −Dieses Feld spezifiziert das _id-Feld des referenzierten Dokuments

  • $db −Dies ist ein optionales Feld, das den Namen der Datenbank enthält, in der das referenzierte Dokument liegt

Überlegen wir uns ein Beispiel für ein Benutzerdokument mit einem DBRef-FeldaddressWie im Code-Beispiel gezeigt-

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

Der DBRef-Feld des Adresses spezifiziert den Standort der referenzierten Adressendokumentes in w3Im Address-Satz der codebox-Datenbank, befindet sich der id von534009e4d8524278200000002.

Der folgende Code sucht dynamisch im durch den $ref-Parameter (in unserem Beispiel address_home) angegebenen Satz nach dem durch den $id-Parameter in der DBRef angegebenen id-Dokument.

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

Das obige Code-Rückgabewertaddress_homeDie folgenden Adressendokumente im Satz existieren-

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