Rufen Sie MongoDB-Funktion von Java
Bin ich versucht, rufen Sie eine gespeicherte JavaScript-Funktion aus dem MongoDB-Java-Treiber.
Habe ich nach dieser Anleitung zum speichern der Funktion auf der DB-server und ich bin in der Lage, rufen Sie die Funktion aus der mongo-shell und das Ergebnis zurückgegeben.
Allerdings kann ich nicht herausfinden, wie Sie zum aufrufen der gleichen Funktion in Java?
Gemäß dieser http://api.mongodb.org/java/current/com/mongodb/DB.html#doEval-java.lang.String-java.lang.Object...- es gibt eine Methode namens doEval
Habe ich auch versucht, es mit dieser Methode:
public static String callFunction() {
try (MongoClient client = new MongoClient("localhost")) {
com.mongodb.DB db = client.getDB("TestDB");
return db.doEval("echoFunction", 3).toString();
}
}
Aber wenn ich die Methode aufrufen, das ist was ich bekomme:
{ "retval" : { "$code" : "function (x) {\n return x;\n}"} , "ok" : 1.0}
und ich würde erwarten, um die Zahl 3 in diesem Fall zurück.
Ein weiteres problem mit dem obigen code ist, dass die Methode client.getDB()
ist veraltet. Wie ich es verstehe, die neue Methode zu nennen ist client.getDatabase()
und es gibt eine MongoDatabase
Objekt, sondern nach dem API es ist keine Methode, um eine Funktion ausführen.
Also meine Frage ist: Ist es möglich, zum ausführen einer gespeicherten JavaScript-Funktion auf die Datenbank-server von Java und erhalten Sie das Ergebnis der Funktion? Und wenn es möglich ist, würde ich mich über etwas Hilfe auf, wie es zu tun?
Danke.
Edit:
Laut einem Kommentar auf Aufruf server js-Funktion aus java, mongodb:
"Wie es scheint, getNextSequence ist eine Funktion geschrieben in der mongo
javascript-shell. Weder die Datenbank (mongod) noch die Java-Seite
kennt diese Funktion existiert und weder in der Lage ist, zu interpretieren, die
Javascript-code der Funktion enthält. Sie haben es zu implementieren
in Java. "
Die Funktion, die ich versuche zu implementieren ist ein wenig komplexer als im obigen Beispiel - es soll die Rückgabe einer Sammlung von Dokumenten und das scheint nicht zu funktionieren mit der db.doEval Methode.
Also ich denke, der Kommentar ist richtig?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie dies tun, statt:
Wenn Sie nur die Funktion Namen in der eval-Sie beziehen sich nur auf die JavaScript-Variablen auf der server-Seite code zu speichern Funktion. Es nicht ausführen. Wenn Sie Klammern verwenden, die Sie verlangen, um tatsächlich eine Funktion ausführen. Wenn Sie brauchen, um zu senden, die etwas komplexer als eine Zahl würde ich raten, zu verwenden JSON-serializer.
All das können Sie mit java-Treiber.
Das Ergebnis ist auch:
Ich beschloss, dass ich das gleiche Problem in der folgenden Weise:
Ich einen Befehl ausführen, der in mongoShell, um meine gespeicherten JavaScript-Funktionen:
Zur Ausführung dieser Funktionen von MongoDB Java Driver:
Sehe ich, dass die Sammlung zahlen wurden erstellt und mit Werten gefüllt. In der IntellijIdea Konsole sehe ich: