Това е повече или по-малко въпрос на това как да проектирате вашите колекции. Тъй като Mongo не знае нищо за типовете, трябва да добавим допълнителни метаданни, за да можем да разграничаваме документите един от друг. Следователно, когато правите заявка, ще трябва да добавите и тези ограничения към заявката. Имайте предвид, че можете да се обърнете към _class
ключ чрез DefaultMongoTypeMapper.DEFAULT_TYPE_KEY
.
Мислехме да добавим някакъв API към заявката, за да изразим, че човек иска да получи само документи от даден тип, като това:
mongo.find(new Query(Teacher.class), Teacher.class);
Все още се чувства малко странно, че трябва да посочите клас на домейн два пъти (което има смисъл, ако искате да ограничите резултатите до документи от даден тип, но да ги картографирате към различен клас). Освен това бихме могли да ограничим резултатите само до документи, които носят точно това тип, тъй като типовете се съхраняват като низове и наследяването може да се приложи само ако класът вече е зареден. Така че, когато правите заявка за документи с тип Person
ще трябва да заредим всички документи първо, опитайте да потърсите типа, направете проверката на типа и евентуално изхвърлете резултата, който е под оптималния от съображения за производителност.
Друг вариант би бил да се съхраняват всички типове, към които може да се присвои клас (почти всички интерфейси и суперкласове с изключение на Object
може би), но това би довело до съхраняване на доста голямо количество данни. Това от своя страна може да се постигне чрез добавяне на флаг към @Document
анотация.
В крайна сметка:в момента няма друг начин освен да събирате билети за JIRA, ако имате предложения как това може да се подобри.