tl;dr
Det skal bruge tilpassede implementeringer til lageret og controlleren.
Detaljer
Vi skal sørge for, at vi ikke farer vild i alle de forskellige aspekter, du nævner her. Jeg vil prøve at løse grenene fra bunden opad:
Udførelse af MongoDB-scripts
Som referencedokumentation om udførelse af scripts med MongoDB
stater (og du allerede har opdaget), er funktionaliteten leveret by MongoTemplate
's ScriptOperations
. Derfor skal det være klart, hvordan man bruger denne API. Se Javadoc for mere information.
Udførelse af scripts via Spring Data repositories
Den næste ting, du beder om, er at udføre disse scripts gennem repository-abstraktionen. For ikke at smide barnet ud med badevandet her, så sørg for, at vi forstår formålet med et depot:det simulerer en samling af aggregerede rødder og adgang til det uden at afsløre den underliggende persistensmekanisme . Eksponeringstyper som ExecutableMongoScript
på depotet ville bryde sidstnævnte træk. Den korrekte tilgang her er således at lave en tilpasset implementering til den pågældende funktionalitet som beskrevet i referencedokumentation om Spring Data-lagre
.
Afsløring af funktionaliteten via REST
Jeg går ud fra, at du refererer til Spring Data RESTs funktion for at afsløre en dedikeret ressource til repository-forespørgselsmetoden i dit spørgsmål. Spring Data REST afslører i øjeblikket kun deklarative forespørgselsmetoder automatisk, for det meste af den grund, at det er svært at ræsonnere om den korrekte HTTP-metode for at understøtte tilpassede implementeringer, da vi ikke kan gætte, hvad der sker inde i metoden.
Den anbefalede måde at afsløre brugerdefinerede lagerforespørgselsmetoder ved hjælp af en brugerdefineret controller med en @RequestMapping
passer til dit formål, kalder lageret og bruger en PersistentEntityResourceAssembler
kan injiceres i behandlermetoden for at producere en PersistentEntityResource
at vende tilbage.