MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Spring-Data mongodb che esegue query su più classi archiviate nella stessa raccolta

Questa è più o meno una questione di come progettare le tue collezioni. Poiché Mongo non sa nulla dei tipi, dobbiamo aggiungere i metadati aggiuntivi per poter distinguere i documenti l'uno dall'altro. Pertanto, durante la query, dovrai aggiungere anche questi vincoli alla query. Nota che puoi fare riferimento a _class digitare tramite DefaultMongoTypeMapper.DEFAULT_TYPE_KEY .

Abbiamo pensato di aggiungere alcune API alla query per esprimere una sola volontà di ottenere documenti di un determinato tipo come questo:

mongo.find(new Query(Teacher.class), Teacher.class);

È ancora un po' strano dover dichiarare la classe di dominio due volte (il che ha senso se si desidera limitare i risultati a documenti di un determinato tipo ma mapparli su una classe diversa). Oltre a ciò, potremmo limitare i risultati solo ai documenti che riportano esattamente questo type poiché i tipi sono archiviati come stringhe e l'ereditarietà può essere applicata solo se la classe è già stata caricata. Quindi, quando si richiedono documenti con il tipo Person dovremmo caricare tutto prima i documenti, prova a cercare il tipo, esegui il controllo del tipo e potenzialmente elimina il risultato che non è ottimale per motivi di prestazioni.

Un'altra opzione sarebbe quella di memorizzare tutti i tipi a cui una classe è assegnabile (praticamente tutte le interfacce e le superclassi tranne Object forse) ma ciò causerebbe la memorizzazione di una notevole quantità di dati. Questo potrebbe essere a sua volta affrontato aggiungendo un flag al @Document annotazione.

In conclusione:al momento, non c'è altro modo se non sentiti libero di aumentare i biglietti JIRA se hai suggerimenti su come migliorarlo.