sql >> Databasteknik >  >> NoSQL >> MongoDB

Spring-Data mongodb frågar efter flera klasser lagrade i samma samling

Det här är mer eller mindre en fråga om hur man designar sina kollektioner. Eftersom Mongo inte kan något om typer måste vi lägga till ytterligare metadata för att kunna skilja dokument från varandra. Så när du frågar måste du också lägga till dessa begränsningar i frågan. Observera att du kan referera till _class nyckel genom DefaultMongoTypeMapper.DEFAULT_TYPE_KEY .

Vi funderade på att lägga till något API till frågan för att uttrycka att man bara vill få dokument av en given typ så här:

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

Det känns fortfarande lite konstigt att du måste ange domänklass två gånger (vilket är vettigt om du vill begränsa resultaten till dokument av en viss typ men mappa dem till en annan klass). Utöver det kunde vi bara begränsa resultaten till dokument som innehåller exakt det typ eftersom typerna lagras som strängar och arv kan endast tillämpas om klassen redan har laddats. Så när du söker efter dokument med typen Person vi måste ladda alla dokument först, försök att slå upp typen, gör typkontrollen och kasta eventuellt resultatet som är suboptimalt av prestandaskäl.

Ett annat alternativ skulle vara att lagra alla typer som en klass kan tilldelas till (i stort sett alla gränssnitt och superklasser utom Object kanske) men det skulle orsaka att en hel del data lagras. Detta kan i sin tur närma sig genom att lägga till en flagga i @Document anteckning.

Summa summarum:för närvarande finns det inget annat sätt, men skaffa gärna JIRA-biljetter om du har förslag på hur detta kan förbättras.



  1. mongodb jokertecken matchar alla värden för specifik nyckel

  2. Hur kan du ladda inledande data i MongoDB genom Spring Boot?

  3. Prestanda för Redis vs Disk i cacheapplikation

  4. Hur man får åtkomst till oplog MongoDB (MMS replica set)