sql >> Base de Datos >  >> NoSQL >> MongoDB

Spring-Data mongodb consultando múltiples clases almacenadas en la misma colección

Esto es más o menos una cuestión de cómo diseñar tus colecciones. Como Mongo no sabe nada acerca de los tipos, tenemos que agregar los metadatos adicionales para poder distinguir los documentos entre sí. Por lo tanto, al consultar, también deberá agregar estas restricciones a la consulta. Tenga en cuenta que puede consultar la _class clave a través de DefaultMongoTypeMapper.DEFAULT_TYPE_KEY .

Pensamos en agregar alguna API a la consulta para expresar que uno solo quiere obtener documentos de un tipo dado como este:

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

Todavía se siente un poco extraño tener que indicar la clase de dominio dos veces (lo que tiene sentido si desea restringir los resultados a documentos de un tipo determinado pero asignarlos a una clase diferente). Más allá de eso, solo podríamos restringir los resultados a documentos que contengan exactamente eso type ya que los tipos se almacenan como cadenas y la herencia solo se puede aplicar si la clase ya se ha cargado. Entonces, al consultar documentos con el tipo Person tendríamos que cargar todos documentos primero, intente buscar el tipo, haga la verificación de tipo y potencialmente deseche el resultado que es subóptimo por razones de rendimiento.

Otra opción sería almacenar todos los tipos a los que se puede asignar una clase (prácticamente todas las interfaces y superclases excepto Object tal vez) pero eso causaría que se almacenara una gran cantidad de datos. Esto podría abordarse a su vez agregando una bandera a @Document anotación.

En pocas palabras:actualmente, no hay otra manera más que siéntase libre de aumentar los boletos de JIRA si tiene sugerencias sobre cómo se puede mejorar esto.