Как выполнить хранимую функцию из mongodb-native / node.js - PullRequest
2 голосов
/ 26 августа 2011

Я пытаюсь выполнить хранимую функцию из среды mongodb-native / node.js.

У меня есть несколько функций внутри db.system.js .

Кажется, Db.executeCommand () - это функция, но я не знаю, как передать имя функции и аргументы.

Я попробовал db.eval (), как было предложено, но получил следующее.

> db.eval('getValue()', {}, function(er,doc) {console.log(er);console.log(doc);});
{ stack: [Getter/Setter], arguments: [ 'send', undefined ], type: 'non_object_property_call', message: [Getter/Setter] }
null

getValue - простая функция, которая возвращает целое число.

У кого-нибудь есть идея? Спасибо.

Ответы [ 3 ]

4 голосов
/ 26 августа 2011

Предполагая, что db - ваш обработчик открытой базы данных:

db.eval ("myFunction (param, param_n)", функция (ошибка, результат) {});

Похоже, вы также можете передавать параметры отдельно. https://github.com/christkv/node-mongodb-native/blob/master/lib/mongodb/db.js

1 голос
/ 09 мая 2017

Вот, пожалуйста:

function testDB(req,res) {
        MongoClient.connect(url, function(err, db) {
            if (err) {
                console.log(err);
                res.send('connection failed');
            } else {
               db.eval("testFunction()", function(err, output) {
                    if(err){
                        console.log("ERROR: "+err);
                        res.send(err);
                        return;
                    }else{
                        res.send(output);
                        return; 
                    }
                });
                db.close();
            }
        });
    }

Я предполагаю, что вы вызываете его для API отдыха.Вы можете изменить параметры функции в зависимости от ваших потребностей.Также я предполагаю, что у вашего URL достаточно прав для вызова функции.Если нет, используйте инструмент монго, такой как RoboMongo, и измените разрешение для пользователя.

0 голосов
/ 19 апреля 2016

Это потому, что вы думаете, что он вернет значение. Это асинхронный вызов, вы должны передать функцию обратного вызова с помощью (err, doc), чтобы получить возвращаемое значение

db.eval('addNumbers(4,5)',function(er,doc){
   console.log(doc);
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...