MongoDB hat keine kaskadierenden Löschungen. Wenn Ihre Anwendung Daten löscht, ist sie auch dafür verantwortlich, alle referenzierten Objekte selbst und alle Verweise auf das gelöschte Dokument zu entfernen. Aber normalerweise, wenn Sie on delete
verwenden In einer relationalen Datenbank haben Sie einen Kompositionsfall, bei dem ein übergeordnetes Objekt ein oder mehrere untergeordnete Objekte besitzt und die untergeordneten Objekte ohne das übergeordnete Objekt bedeutungslos sind. In dieser Situation empfiehlt MongoDB die Einbettung statt der Referenzierung . Das bedeutet, dass Sie im übergeordneten Objekt ein Array erstellen und die vollständigen untergeordneten Dokumente in dieses Array einfügen, anstatt sie in einer eigenen Sammlung zu behalten. Auf diese Weise werden sie zusammen mit dem übergeordneten Element gelöscht, da sie ein Teil davon sind.
Während es in SQL ein absolutes No-Go ist, mehr als einen Wert in einem Feld zu behalten, ist daran in MongoDB nichts auszusetzen. Das liegt daran, dass die MongoDB-Abfragesprache problemlos mit Arrays und eingebetteten Objekten arbeiten kann. Sie können sogar Indizes für Felder von untergeordneten Dokumenten in Arrays erstellen, sodass Sie leicht nach Objekten suchen können, die in andere Objekte eingebettet sind.
Wenn Sie dennoch auf Objekte aus einer anderen Sammlung verweisen möchten, können Sie entweder ein DBRef verwenden oder Sie können auch einen anderen eindeutigen Bezeichner verwenden (Eindeutigkeit ist eines der wenigen Dinge, die von MongoDB erzwungen werden können. Dazu muss erstellen Sie einen eindeutigen Index mit dem createIndex-Befehl ). Aber MongoDB erzwingt in diesem Fall keine Konsistenz. Sie können DBRefs erstellen, die auf nicht vorhandene ObjectIds verweisen, und wenn das Dokument, auf das DBRef verweist, gelöscht wird, passiert nichts. Die Anwendung ist dafür verantwortlich sicherzustellen, dass beim Löschen eines Dokuments alle Dokumente, die darauf verweisen, aktualisiert werden.
Constraints können auch nicht von MongoDB erzwungen werden. Aufgrund der schemalosen Natur von MongoDB kann es nicht einmal einen bestimmten Typ für ein Feld erzwingen. Auch hier ist Ihre Anwendung dafür verantwortlich, sicherzustellen, dass die Daten, die sie in mongodb eingibt, bestimmten Spezifikationen entsprechen. Wenn Sie dies automatisieren möchten, stehen für viele Programmiersprachen objektrelationale Mapping-Frameworks für MongoDB zur Verfügung.
Um alles zusammenzufassen: MongoDB ist nicht so "intelligent" wie SQL-Datenbanken. An sich macht es nicht viel. Es tut, was ihm die Anwendung sagt, nicht mehr und nicht weniger. Aber das ist der Grund, warum es so schnell (keine teuren Konsistenzprüfungen) und flexibel (keine Datenbankänderungen notwendig, um neue Features zu implementieren) ist.