sql >> Database >  >> NoSQL >> MongoDB

Spring-Data mongodb bevraagt ​​meerdere klassen die in dezelfde verzameling zijn opgeslagen

Dit is min of meer een kwestie van hoe je je collecties vormgeeft. Omdat Mongo niets weet van typen moeten we de extra metadata toevoegen om documenten van elkaar te kunnen onderscheiden. Dus wanneer u een query uitvoert, moet u deze beperkingen ook aan de query toevoegen. Merk op dat u kunt verwijzen naar de _class sleutel via DefaultMongoTypeMapper.DEFAULT_TYPE_KEY .

We hebben overwogen om een ​​API aan de query toe te voegen om uit te drukken dat men alleen documenten van een bepaald type wil krijgen, zoals dit:

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

Het voelt nog steeds een beetje raar dat je domeinklasse twee keer moet vermelden (wat logisch is als je de resultaten wilt beperken tot documenten van een bepaald type, maar ze wilt toewijzen aan een andere klasse). Verder konden we de resultaten alleen beperken tot documenten die precies dat bevatten type, aangezien de typen worden opgeslagen als Strings en overerving kan alleen worden toegepast als de klasse al is geladen. Dus bij het opvragen van documenten met het type Person we zouden alle moeten laden documenten eerst, probeer het type op te zoeken, voer de typecontrole uit en gooi mogelijk het resultaat weg dat om prestatieredenen niet optimaal is.

Een andere optie zou zijn om alle typen op te slaan waaraan een klasse kan worden toegewezen (vrijwel alle interfaces en superklassen behalve Object misschien) maar dat zou ertoe leiden dat er nogal wat gegevens worden opgeslagen. Dit kan op zijn beurt worden benaderd door een vlag toe te voegen aan het @Document annotatie.

Kortom:er is momenteel geen andere manier, maar voel je vrij om JIRA-tickets in te zamelen als je suggesties hebt hoe dit kan worden verbeterd.



  1. MongoDB zoeken in collectie

  2. Ik wil mongod niet beginnen met `sudo mongod`

  3. Waarom geeft PyMongo 3 ServerSelectionTimeoutError?

  4. Mongodb retourneert meerdere subarrayresultaten en sluit andere geretourneerde resultaten uit