Próbuję wywołać funkcję JavaScript przechowywaną ze sterownika Java MongoDB.Wywołanie funkcji MongoDB z Java
Podążałem za tym przewodnikiem, aby zapisać funkcję na serwerze DB i mogę wywołać funkcję z powłoki mongo i uzyskać wynik.
Jednak nie mogę się dowiedzieć, jak wywołać tę samą funkcję w Javie?
Według tego http://api.mongodb.org/java/current/com/mongodb/DB.html#doEval-java.lang.String-java.lang.Object...- istnieje metoda zwana doEval
Próbowałem również z niego korzystać z tej metody:
public static String callFunction() {
try (MongoClient client = new MongoClient("localhost")) {
com.mongodb.DB db = client.getDB("TestDB");
return db.doEval("echoFunction", 3).toString();
}
}
Ale gdy zgłoszę metody jest to, co mam:
{ "retval" : { "$code" : "function (x) {\n return x;\n}"} , "ok" : 1.0}
i spodziewałbym się, że w tym przypadku otrzymam numer 3.
Kolejnym problemem z powyższym kodem jest to, że metoda client.getDB()
jest przestarzała. Jak rozumiem, nowa metoda wywołania to client.getDatabase()
i zwraca obiekt MongoDatabase
, ale zgodnie z API nie ma metody wykonywania funkcji.
Moje pytanie brzmi: czy można uruchomić zapisaną funkcję JavaScript na serwerze bazy danych z poziomu Javy i odzyskać wynik tej funkcji? A jeśli to możliwe, byłbym wdzięczny za pomoc, jak to zrobić?
Dziękuję.
Edit:
Według komentarzu Calling server js function on mongodb from java:
„Wydaje się getNextSequence jest funkcja napisana w Mongo javascript shell Ani bazy danych (mongod) ani Java. strona wie, że ta funkcja istnieje i nie jest w stanie interpretować kodu JavaScript, który zawiera ta funkcja. Będziesz musiał ponownie wdrożyć go w języku Java . "
Funkcja, którą próbuję zaimplementować, jest nieco bardziej skomplikowana niż powyższy przykład - powinna zwracać kolekcję dokumentów i wydaje się, że nie działa ona przy użyciu metody db.doEval.
Zgaduję, że komentarz jest poprawny?
OK, że pracował, dziękuję. Ale to zupełnie nie odpowiada na moje pytanie. Tak jak napisałem: Metoda client.getDB() jest przestarzała. Jak rozumiem, nową metodą wywołania jest client.getDatabase() i zwraca obiekt MongoDatabase, ale zgodnie z API nie ma metody wykonywania funkcji. Muszę się dowiedzieć, czy używa on niezamężnej metody/klasy. –
Edytowałem moje pytanie z większą informatoną. –
Przyjąłem twoją odpowiedź tak, jak ty pomogłeś. Ale zdecydowałem się wdrożyć moją funkcję w Javie. –