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

MongoDB-Beziehung

Die Beziehung in MongoDB stellt die logische Beziehung zwischen verschiedenen Dokumenten dar. Beziehungen können durch Einfügen und Referenzieren modelliert werden. Diese Beziehung kann sein1:1,1:N, N:1oder N:N führt.

Lassen Sie uns die Situation betrachten, in der Adressen für Benutzer gespeichert werden. Daher kann ein Benutzer mehrere Adressen haben, was zu1:N-Beziehung.

Hier ist ein Beispiel für die Struktur des Dokumentsuser-

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

Hier ist ein Beispiel für die Struktur des Dokumentsaddress-

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

Eingebettetes Beziehungsmodell erstellen

Bei der eingebetteten Methode fügen wir das Adressdokument in das Benutzerdokument ein.

>db.users.insert({
	{
		"_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"
			}
		]
	}
})

Diese Methode speichert alle relevanten Daten in einem Dokument, was die Suche und Wartung erleichtert. Das gesamte Dokument kann in einer einzigen Abfrage abgerufen werden, zum Beispiel-

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

Beachten Sie in der obigen Abfrage,dbunduserssind Datenbank und Sammlung.

Der Nachteil ist, dass die Lesegeschwindigkeit beeinträchtigt werden könnte, wenn die Größe der eingebetteten Dokumente kontinuierlich zu groß wird./Schreibleistung.

Referenzbeziehungsmodell erstellen

Dies ist der Weg zur Normierung der Beziehungsgestaltung. Bei dieser Methode werden Benutzer- und Adressdokumente getrennt gepflegt, aber das Benutzerdokument enthält ein Feld, das auf den id-Feld der Adressdokument referenziert.

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

Wie oben gezeigt, enthält das Benutzerdokument das Array-Feld address_ids, das die ObjectId der entsprechenden Adressen enthält. Mit diesen ObjectId können wir die Adressendokumente abfragen und dort die Adressendetails erhalten. Mit diesem Verfahren benötigen wir zwei Abfragen: Zunächstaddress_idsvonuserFeld aus dem Dokument abrufen, dann vonaddressDiese Adressen aus der Sammlung abrufen.

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