Databases Reference
In-Depth Information
Referenzen zwischen Dokumenten
Eine der Eigenschaften von NoSQL ist auch der Verzicht von JOINS. Alle Daten sollten
in einem Dokument gehalten werden, das Prinzip der Foreign Keys aus relationalen Da-
tenbanken soll hier nicht gelten. MongoDB erlaubt allerdings die Referenzierung von Do-
kumenten untereinander, das Zauberwort heißt DBRef . Das Verfahren dazu ist recht ein-
fach. In einem Dokument, das eine Referenz auf ein anderes Dokument beinhalten soll,
bekommt ein Feld einen Array mit den Keys $ref und $id . Der Wert in $ref ist der Na-
me der Collection, und der Wert in $id ist die ID des Dokuments, auf das verwiesen
wird. Dieses Objekt kann manuell eingetragen werden, es gibt aber auch eine Funktion
dafür: $ahref_1=MongoDBRef::create(„autohaus“,1) . Hier wird eine Referenz auf das
Dokument mit der _id=1 aus der Collection „autohaus“ erzeugt. Legen wir nun einen
Kunden mit $mongo->phpmag->autohaus->in-
sert(array(„_id“=>1,“name“=>“Kurowski“,“autohaus“=>$ahref_1)) an, dann haben
wir folgenden Eintrag erzeugt:
{”id“=>1,“name“=>“Kurowski“,“autohaus“=>array(”$ref“=>“autohaus“,“$id“=>1)}.
Angenommen, wir bekommen dieses Dokument als Ergebnis einer Abfrage ($ergeb-
nisDoc) , und möchten nun auch noch das Autohaus wissen. Das könnten wir manuell
mit einer Abfrage aus dem Ergebnis von $ref und $id bekommen, einfacher aber geht
es mit den Bordmitteln: $autohaus=MongoDBRef::get($mongo->php-
mag,$ergebnisDoc[”autohaus”]); . Mehr als eine Vereinfachung auf Clientseite ist diese
Referenz allerdings nicht, ein echtes JOIN bzw. ein Filter, der auf die Elemente eines refe-
renzierten Dokuments zugreifen soll, ist damit nicht möglich.
Dateien
MongoDB nutzt für die Datenspeicherung das GridFS Filesystem. Dieses Filesystem spei-
chert große Dateien in einer Collection von vielen kleinen Teilen (Chunks) und alle Me-
tadaten dieser Datei in einer gesonderten Datei. Um eine Datei zu speichern, wird die
GridFS-Klasse benutzt:
$mongo=new Mongo();
$db=$mongo->phpmag;
$bild=file_get_contents('DSC06830.JPG');
$gridfs=$db->getGridFS();
$id=$gridFS->storeBytes($bild,array("metadata”=>array
Search WWH ::




Custom Search