Dette er mere eller mindre et spørgsmål om, hvordan man designer sine kollektioner. Da Mongo ikke ved noget om typer, er vi nødt til at tilføje de ekstra metadata for at kunne skelne dokumenter fra hinanden. Når du forespørger, skal du derfor også tilføje disse begrænsninger til forespørgslen. Bemærk, at du kan henvise til _class
tast gennem DefaultMongoTypeMapper.DEFAULT_TYPE_KEY
.
Vi tænkte på at tilføje nogle API til forespørgslen for at udtrykke, at man kun ønsker at få dokumenter af en given type som denne:
mongo.find(new Query(Teacher.class), Teacher.class);
Det føles stadig lidt underligt, at du skal angive domæneklasse to gange (hvilket giver mening, hvis du vil begrænse resultaterne til dokumenter af en given type, men kortlægge dem til en anden klasse). Ud over det kunne vi kun begrænse resultaterne til dokumenter, der indeholder præcis det type, da typerne gemmes som Strings og arv kan kun anvendes, hvis klassen allerede er indlæst. Så når du forespørger efter dokumenter med typen Person
vi bliver nødt til at indlæse alle dokumenter først, prøv at slå typen op, foretag typetjekket og smid muligvis resultatet væk, som er suboptimalt af ydeevnemæssige årsager.
En anden mulighed ville være at gemme alle typer en klasse kan tildeles (stort set alle grænseflader og superklasser undtagen Object
måske), men det ville medføre, at der lagres en hel del data. Dette kunne igen nås ved at tilføje et flag til @Document
anmærkning.
Nederste linje:i øjeblikket er der ingen anden måde, men du er velkommen til at hæve JIRA-billetter, hvis du har forslag til, hvordan dette kan forbedres.