MongoDB - Datenbankreferenzen
Wie im letzten Kapitel der MongoDB-Beziehungen zu sehen ist, verwenden wir das Konzept von, um eine normalisierte Datenbankstruktur in MongoDB zu implementieren Referenced Relationships auch bezeichnet als Manual Referencesin dem wir die ID des referenzierten Dokuments manuell in einem anderen Dokument speichern. In Fällen, in denen ein Dokument Verweise aus verschiedenen Sammlungen enthält, können wir jedoch verwendenMongoDB DBRefs.
DBRefs vs Manuelle Referenzen
Als Beispielszenario, in dem wir DBRefs anstelle von manuellen Verweisen verwenden würden, betrachten Sie eine Datenbank, in der wir verschiedene Arten von Adressen (Privat, Büro, Mailing usw.) in verschiedenen Sammlungen (address_home, address_office, address_mailing usw.) speichern. Nun, wenn auserDas Dokument der Sammlung verweist auf eine Adresse. Außerdem muss angegeben werden, welche Sammlung basierend auf dem Adresstyp untersucht werden soll. In solchen Szenarien, in denen ein Dokument auf Dokumente aus vielen Sammlungen verweist, sollten wir DBRefs verwenden.
Verwenden von DBRefs
Es gibt drei Felder in DBRefs -
$ref - Dieses Feld gibt die Sammlung des Dokuments an, auf das verwiesen wird
$id - Dieses Feld gibt das Feld _id des Dokuments an, auf das verwiesen wird
$db - Dies ist ein optionales Feld und enthält den Namen der Datenbank, in der sich das Dokument befindet, auf das verwiesen wird
Stellen Sie sich ein Beispielbenutzerdokument mit einem DBRef-Feld vor address wie im Code-Snippet gezeigt -
{
"_id":ObjectId("53402597d852426020000002"),
"address": {
"$ref": "address_home",
"$id": ObjectId("534009e4d852427820000002"),
"$db": "tutorialspoint"},
"contact": "987654321",
"dob": "01-01-1991",
"name": "Tom Benzamin"
}
Das address Das DBRef-Feld gibt hier an, in dem sich das referenzierte Adressdokument befindet address_home Sammlung unter tutorialspoint Datenbank und hat eine ID von 534009e4d852427820000002.
Der folgende Code wird dynamisch in der von angegebenen angegebenen Sammlung angezeigt $ref Parameter (address_home in unserem Fall) für ein Dokument mit der ID von $id Parameter in DBRef.
>var user = db.users.findOne({"name":"Tom Benzamin"})
>var dbRef = user.address
>db[dbRef.$ref].findOne({"_id":(dbRef.$id)})
Der obige Code gibt das folgende Adressdokument zurück, das in vorhanden ist address_home Sammlung -
{
"_id" : ObjectId("534009e4d852427820000002"),
"building" : "22 A, Indiana Apt",
"pincode" : 123456,
"city" : "Los Angeles",
"state" : "California"
}