MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Spring-Data mongodb fragt mehrere Klassen ab, die in derselben Sammlung gespeichert sind

Das ist mehr oder weniger eine Frage der Gestaltung Ihrer Kollektionen. Da Mongo nichts über Typen weiß, müssen wir die zusätzlichen Metadaten hinzufügen, um Dokumente voneinander unterscheiden zu können. Daher müssen Sie beim Abfragen diese Einschränkungen auch zur Abfrage hinzufügen. Beachten Sie, dass Sie sich auf _class beziehen können Schlüssel durch DefaultMongoTypeMapper.DEFAULT_TYPE_KEY .

Wir haben darüber nachgedacht, der Abfrage eine API hinzuzufügen, um auszudrücken, dass man nur Dokumente eines bestimmten Typs wie folgt erhalten möchte:

mongo.find(new Query(Teacher.class), Teacher.class);

Es fühlt sich immer noch etwas seltsam an, dass Sie die Domänenklasse zweimal angeben müssen (was sinnvoll ist, wenn Sie die Ergebnisse auf Dokumente eines bestimmten Typs beschränken, sie aber einer anderen Klasse zuordnen möchten). Darüber hinaus konnten wir die Ergebnisse nur auf Dokumente einschränken, die genau das tragen Typ, da die Typen als Strings gespeichert werden und die Vererbung nur angewendet werden kann, wenn die Klasse bereits geladen wurde. Also bei der Suche nach Dokumenten mit dem Typ Person wir müssten alle laden Dokumente zuerst, versuchen Sie, den Typ nachzuschlagen, führen Sie die Typprüfung durch und verwerfen Sie möglicherweise das Ergebnis, das aus Leistungsgründen suboptimal ist.

Eine andere Option wäre, alle Typen zu speichern, denen eine Klasse zuweisbar ist (so ziemlich alle Interfaces und Oberklassen außer Object vielleicht), aber das würde dazu führen, dass eine ganze Menge Daten gespeichert werden. Dies könnte wiederum durch Hinzufügen eines Flags zum @Document angegangen werden Anmerkung.

Fazit:Derzeit gibt es keine andere Möglichkeit, als JIRA-Tickets zu erheben, wenn Sie Vorschläge haben, wie dies verbessert werden kann.