English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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" }
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,db
undusers
sind 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.
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_ids
vonuser
Feld aus dem Dokument abrufen, dann vonaddress
Diese 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"]}})