To je víceméně otázka, jak své kolekce navrhnout. Protože Mongo neví nic o typech, musíme přidat další metadata, abychom byli schopni rozlišit dokumenty od sebe navzájem. Při dotazování tedy budete muset do dotazu přidat i tato omezení. Všimněte si, že můžete odkazovat na _class
klíč přes DefaultMongoTypeMapper.DEFAULT_TYPE_KEY
.
Přemýšleli jsme o přidání nějakého API do dotazu, abychom vyjádřili, že člověk chce získat pouze dokumenty daného typu, jako je tento:
mongo.find(new Query(Teacher.class), Teacher.class);
Stále je trochu divné, že musíte uvést doménovou třídu dvakrát (což dává smysl, pokud chcete omezit výsledky na dokumenty daného typu, ale mapovat je na jinou třídu). Kromě toho jsme mohli omezit výsledky pouze na dokumenty, které obsahují přesně to typ, protože typy jsou uloženy jako řetězce a dědičnost lze použít pouze v případě, že třída již byla načtena. Tedy při dotazování na dokumenty typu Person
museli bychom načíst vše dokumenty, zkuste nejprve vyhledat typ, proveďte typovou kontrolu a případně zahoďte výsledek, který není z výkonnostních důvodů optimální.
Další možností by bylo uložit všechny typy, ke kterým je třída přiřaditelná (skoro všechna rozhraní a supertřídy kromě Object
možná), ale to by způsobilo uložení velkého množství dat. Toho lze zase dosáhnout přidáním příznaku do @Document
anotace.
Sečteno a podtrženo:v současné době neexistuje žádná jiná cesta, ale neváhejte a získejte vstupenky JIRA, pokud máte návrhy, jak to lze zlepšit.