【问题标题】:How to execute a stored function from mongodb-native/node.js如何从 mongodb-native/node.js 执行存储的函数
【发布时间】:2011-08-26 03:35:05
【问题描述】:

我正在尝试从 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 是一个返回整数的简单函数。

有人有想法吗?谢谢。

【问题讨论】:

    标签: mongodb node.js


    【解决方案1】:

    假设 db 是您的打开数据库处理程序:

    db.eval("myFunction(param, param_n)", function(error, result) { });

    看起来你也可以单独传递参数。 https://github.com/christkv/node-mongodb-native/blob/master/lib/mongodb/db.js

    【讨论】:

    • 你能给我举个例子吗?我仍然有 db.eval() 的问题
    • @MinJaeHwang:如果我使用 db.system.js.save({_id:"addNumbers", value:function(x, y){ return x + y; }}); 之类的东西从 js 命令行将存储过程 addNumbers 获取到我的数据库中,node.js 命令:db.eval("addNumbers(4, 5)", function(error, result) { console.log(result); }); 将向控制台输出 9。这有帮助吗?
    • 它只是返回空值。 db.eval('addNumbers(4,5)');不过,在 mongo shell 返回 9。
    【解决方案2】:

    你去吧:

    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 之类的 mongo 工具并更改用户的权限。

    【讨论】:

      【解决方案3】:

      因为你认为它会返回值,这是异步调用,你必须通过一个回调函数与(err,doc)来获取返回值

      db.eval('addNumbers(4,5)',function(er,doc){
         console.log(doc);
      })
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-14
        • 1970-01-01
        • 2012-08-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多