tl;dr
Es werden benutzerdefinierte Implementierungen für das Repository und den Controller benötigt.
Einzelheiten
Wir müssen aufpassen, dass wir uns nicht in all den verschiedenen Aspekten verlieren, die Sie hier ansprechen. Ich werde versuchen, die Äste von unten nach oben zu entwirren:
Ausführen von MongoDB-Skripten
Als Referenzdokumentation zum Ausführen von Skripten mit MongoDB
Staaten (und Sie haben es bereits entdeckt), wird die Funktionalität by MongoTemplate
bereitgestellt 's ScriptOperations
. Daher sollte klar sein, wie diese API verwendet wird. Weitere Informationen finden Sie im Javadoc.
Skripte über Spring Data-Repositories ausführen
Das nächste, wonach Sie fragen, ist die Ausführung dieser Skripts durch die Repository-Abstraktion. Um das Baby hier nicht mit dem Bade auszuschütten, stellen Sie sicher, dass wir den Zweck eines Repositorys verstehen:Es simuliert eine Sammlung von Aggregatwurzeln und den Zugriff darauf ohne den zugrunde liegenden Persistenzmechanismus preiszugeben . Verfügbarmachen von Typen wie ExecutableMongoScript
auf dem Repository würde die letztere Eigenschaft brechen. Daher besteht der richtige Ansatz hier darin, eine benutzerdefinierte Implementierung für diese bestimmte Funktionalität zu erstellen, wie in Referenzdokumentation zu Spring Data-Repositories
.
Die Funktionalität über REST verfügbar machen
Ich gehe davon aus, dass Sie sich auf die Funktion von Spring Data REST beziehen, um eine dedizierte Ressource für die Repository-Abfragemethode in Ihrer Frage bereitzustellen. Spring Data REST macht derzeit nur deklarative Abfragemethoden automatisch verfügbar, hauptsächlich aus dem Grund, dass es schwierig ist, über die richtige HTTP-Methode zur Unterstützung benutzerdefinierter Implementierungen nachzudenken, da wir nicht erraten können, was innerhalb der Methode passiert.
Die empfohlene Methode zum Verfügbarmachen benutzerdefinierter Repository-Abfragemethoden mithilfe eines benutzerdefinierten Controllers mit einem @RequestMapping
passend zu Ihrem Zweck, Aufruf des Repositorys und Verwendung eines PersistentEntityResourceAssembler
injizierbar in die Handler-Methode, um eine PersistentEntityResource
zu erzeugen zurück.