MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Spring-Data mongodb interrogeant plusieurs classes stockées dans la même collection

C'est plus ou moins une question de comment concevoir vos collections. Comme Mongo ne sait rien des types, nous devons ajouter les métadonnées supplémentaires pour pouvoir distinguer les documents les uns des autres. Ainsi, lors de l'interrogation, vous devrez également ajouter ces contraintes à la requête. Notez que vous pouvez vous référer à la _class clé via DefaultMongoTypeMapper.DEFAULT_TYPE_KEY .

Nous avons pensé à ajouter une API à la requête pour exprimer que l'on souhaite uniquement obtenir des documents d'un type donné comme celui-ci :

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

Il semble toujours un peu étrange que vous deviez déclarer la classe de domaine deux fois (ce qui est logique si vous souhaitez restreindre les résultats aux documents d'un type donné mais les mapper sur une classe différente). Au-delà de cela, nous ne pouvions restreindre les résultats qu'aux documents portant exactement cela type car les types sont stockés sous forme de chaînes et l'héritage ne peut être appliqué que si la classe a déjà été chargée. Ainsi, lors de la recherche de documents avec le type Person nous aurions à charger tous documents d'abord, essayez de rechercher le type, effectuez la vérification de type et rejetez éventuellement le résultat qui est sous-optimal pour des raisons de performances.

Une autre option serait de stocker tous les types auxquels une classe est attribuable (à peu près toutes les interfaces et superclasses sauf Object peut-être), mais cela entraînerait le stockage d'une quantité considérable de données. Cela pourrait à son tour être abordé en ajoutant un indicateur au @Document annotation.

Conclusion :actuellement, il n'y a pas d'autre moyen que de créer des tickets JIRA si vous avez des suggestions pour améliorer cela.