MongoDB Beziehungen

MongoDB-Beziehungen stellen die logischen Verbindungen zwischen mehreren Dokumenten dar.

Dokumente können durch Einbetten und Referenzieren verknüpft werden.

Beziehungen in MongoDB können sein:

  • 1:1 (eins-zu-eins)
  • 1: N (eins-zu-viele)
  • N: 1 (Viele-zu-Eins)
  • N: N (Viele-zu-Viele)

Als Nächstes betrachten wir die Beziehung zwischen Benutzern und Benutzeradressen.

Ein Benutzer kann mehrere Adressen haben, daher handelt es sich um eine Eins-zu-Viele-Beziehung.

Das Folgende ist die einfache Struktur desuser-Dokuments:

{
   "_id":ObjectId("52ffc33cd85242f436000001"),
   "name": "Tom Hanks",
   "contact": "987654321",
   "dob": "01-01-1991"
}

Das Folgende ist die einfache Struktur desaddress-Dokuments:

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

Eingebettete Beziehungen

Mit der eingebetteten Methode können wir Benutzeradressen in das Dokument des Benutzers einbetten:

{
   "_id":ObjectId("52ffc33cd85242f436000001"),
   "contact": "987654321",
   "dob": "01-01-1991",
   "name": "Tom Benzamin",
   "address": [
      {
         "building": "22 A, Indiana Apt",
         "pincode": 123456,
         "city": "Los Angeles",
         "state": "California"
      },
      {
         "building": "170 A, Acropolis Apt",
         "pincode": 456789,
         "city": "Chicago",
         "state": "Illinois"
      }]
} 

Die obigen Daten werden in einem einzigen Dokument gespeichert, was das Abrufen und Verwalten von Daten erleichtert. Sie können die Adresse des Benutzers wie folgt abfragen:

>db.users.findOne({"name":"Tom Benzamin"},{"address":1})

Hinweis: In der obigen Abfrage stehendbundusersfür die Datenbank und die Sammlung.

Der Nachteil dieser Datenstruktur besteht darin, dass, wenn Benutzer und Benutzeradressen weiter zunehmen und das Datenvolumen weiter wächst, dies die Lese- und Schreibleistung beeinträchtigt.

Referenzierte Beziehungen

Die referenzierte Beziehung ist eine Methode, die häufig beim Entwerfen von Datenbanken verwendet wird. Diese Methode trennt das Dokument mit Benutzerdaten vom Dokument mit Benutzeradressdaten, indem auf dasid-Feld des Dokuments verwiesen wird, um die Beziehung herzustellen.

{
   "_id":ObjectId("52ffc33cd85242f436000001"),
   "contact": "987654321",
   "dob": "01-01-1991",
   "name": "Tom Benzamin",
   "address_ids": [
      ObjectId("52ffc4a5d85242602e000000"),
      ObjectId("52ffc4a5d85242602e000001")
   ]
}

Im obigen Beispiel enthält dasaddress_ids-Feld des Benutzerdokuments ein Array von ObjectIds der Benutzeradressen.

Wir können diese ObjectIds der Benutzeradressen lesen, um die detaillierten Adressinformationen des Benutzers zu erhalten.

Diese Methode erfordert zwei Abfragen. Die erste Abfrage ruft die ObjectIds der Benutzeradressen ab, und die zweite Abfrage verwendet die abgerufenen IDs, um die detaillierten Adressinformationen des Benutzers zu erhalten.

>var result = db.users.findOne({"name":"Tom Benzamin"},{"address_ids":1})
>var addresses = db.address.find({"_id":{"$in":result["address_ids"]}})
Andere Erweiterungen