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

Spring-Data mongodb forespørger på flere klasser gemt i samme samling

Dette er mere eller mindre et spørgsmål om, hvordan man designer sine kollektioner. Da Mongo ikke ved noget om typer, er vi nødt til at tilføje de ekstra metadata for at kunne skelne dokumenter fra hinanden. Når du forespørger, skal du derfor også tilføje disse begrænsninger til forespørgslen. Bemærk, at du kan henvise til _class tast gennem DefaultMongoTypeMapper.DEFAULT_TYPE_KEY .

Vi tænkte på at tilføje nogle API til forespørgslen for at udtrykke, at man kun ønsker at få dokumenter af en given type som denne:

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

Det føles stadig lidt underligt, at du skal angive domæneklasse to gange (hvilket giver mening, hvis du vil begrænse resultaterne til dokumenter af en given type, men kortlægge dem til en anden klasse). Ud over det kunne vi kun begrænse resultaterne til dokumenter, der indeholder præcis det type, da typerne gemmes som Strings og arv kan kun anvendes, hvis klassen allerede er indlæst. Så når du forespørger efter dokumenter med typen Person vi bliver nødt til at indlæse alle dokumenter først, prøv at slå typen op, foretag typetjekket og smid muligvis resultatet væk, som er suboptimalt af ydeevnemæssige årsager.

En anden mulighed ville være at gemme alle typer en klasse kan tildeles (stort set alle grænseflader og superklasser undtagen Object måske), men det ville medføre, at der lagres en hel del data. Dette kunne igen nås ved at tilføje et flag til @Document anmærkning.

Nederste linje:i øjeblikket er der ingen anden måde, men du er velkommen til at hæve JIRA-billetter, hvis du har forslag til, hvordan dette kan forbedres.



  1. munk vs mongoose for Mongodb

  2. MongoDB - Fordel ved at bruge 12 bytes streng som unik identifikator i stedet for inkrementel værdi

  3. Forespørgsel inde i Postgres JSON-arrays

  4. Multi-Tenant Rails 3 App på Heroku ved hjælp af PostgreSQL