Det här är mer eller mindre en fråga om hur man designar sina kollektioner. Eftersom Mongo inte kan något om typer måste vi lägga till ytterligare metadata för att kunna skilja dokument från varandra. Så när du frågar måste du också lägga till dessa begränsningar i frågan. Observera att du kan referera till _class
nyckel genom DefaultMongoTypeMapper.DEFAULT_TYPE_KEY
.
Vi funderade på att lägga till något API till frågan för att uttrycka att man bara vill få dokument av en given typ så här:
mongo.find(new Query(Teacher.class), Teacher.class);
Det känns fortfarande lite konstigt att du måste ange domänklass två gånger (vilket är vettigt om du vill begränsa resultaten till dokument av en viss typ men mappa dem till en annan klass). Utöver det kunde vi bara begränsa resultaten till dokument som innehåller exakt det typ eftersom typerna lagras som strängar och arv kan endast tillämpas om klassen redan har laddats. Så när du söker efter dokument med typen Person
vi måste ladda alla dokument först, försök att slå upp typen, gör typkontrollen och kasta eventuellt resultatet som är suboptimalt av prestandaskäl.
Ett annat alternativ skulle vara att lagra alla typer som en klass kan tilldelas till (i stort sett alla gränssnitt och superklasser utom Object
kanske) men det skulle orsaka att en hel del data lagras. Detta kan i sin tur närma sig genom att lägga till en flagga i @Document
anteckning.
Summa summarum:för närvarande finns det inget annat sätt, men skaffa gärna JIRA-biljetter om du har förslag på hur detta kan förbättras.