sql >> Databáze >  >> NoSQL >> MongoDB

Spring-Data mongodb dotazuje více tříd uložených ve stejné kolekci

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.



  1. Odhalení Redis pomocí Ingress Nginx Controller

  2. Samoobslužný MongoDB

  3. Jak kaskádově odstranit dokument v mongodb?

  4. Zkontrolujte existenci více polí v dokumentu MongoDB