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?

InformationsquelleAutor Emil C | 2015-09-09
Schreibe einen Kommentar