tl;dr
Het heeft aangepaste implementaties nodig voor de repository en de controller.
Details
We moeten ervoor zorgen dat we niet verdwalen in alle verschillende aspecten die je hier noemt. Ik zal proberen de takken van onder naar boven te ontwarren:
MongoDB-scripts uitvoeren
Als de referentiedocumentatie over het uitvoeren van scripts met MongoDB
staten (en je hebt het al ontdekt), wordt de functionaliteit geleverd by MongoTemplate
's ScriptOperations
. Dus hoe je die API moet gebruiken, moet duidelijk zijn. Raadpleeg de Javadoc voor meer informatie.
Scripts uitvoeren via Spring Data-opslagplaatsen
Het volgende waar je om vraagt, is het uitvoeren van die scripts via de repository-abstractie. Om het kind hier niet met het badwater weg te gooien, moet u ervoor zorgen dat we het doel van een opslagplaats begrijpen:het simuleert een verzameling verzamelde wortels en toegang ertoe zonder het onderliggende persistentiemechanisme bloot te leggen . Typen blootleggen zoals ExecutableMongoScript
op de repository zou de laatste eigenschap breken. De juiste aanpak hier is dus om een aangepaste implementatie voor die specifieke functionaliteit te maken, zoals beschreven in de referentiedocumentatie over Spring Data-opslagplaatsen
.
De functionaliteit blootleggen via REST
Ik neem aan dat u verwijst naar de functie van Spring Data REST om een speciale bron voor de repository-querymethode in uw vraag bloot te leggen. Spring Data REST stelt momenteel alleen declaratieve querymethoden automatisch beschikbaar, voornamelijk omdat het moeilijk is om te redeneren over de juiste HTTP-methode om aangepaste implementaties te ondersteunen, omdat we niet kunnen raden wat er in de methode gebeurt.
De aanbevolen manier om aangepaste querymethoden voor repository's beschikbaar te maken met behulp van een aangepaste controller met een @RequestMapping
geschikt zijn voor uw doel, de repository aanroepen en een PersistentEntityResourceAssembler
gebruiken injecteerbaar in de handlermethode om een PersistentEntityResource
te produceren om terug te keren.