2011-08-26 134 views
2

我試圖從mongodb-native/node.js環境執行存儲的函數。如何從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是一個簡單的函數,它返回一個整數。

任何人有想法?謝謝。

回答

4

假設db是打開的數據庫處理程序:

db.eval( 「myFunction的(PARAM,param_n的)」 功能(錯誤結果){});

看起來你也可以單獨傳遞參數。 https://github.com/christkv/node-mongodb-native/blob/master/lib/mongodb/db.js

+0

你能舉個例子嗎?我仍然有問題db.eval() –

+0

@MinJaeHwang:如果我使用類似 'db.system.js.save({_ id:「addNumbers」,值:function(x,y){return x + y;}});' 從js命令行獲取存儲過程addNumbers到我的數據庫中,node.js命令: 'db.eval(「addNumbers(4,5)」,function ,result){console.log(result);});' 將輸出9到控制檯。這有幫助嗎? – cjohn

+0

它只是返回null。 db.eval( '的addNumbers(4,5)');儘管如此,在mongo shell中返回9。 –

0

這是因爲你認爲它會返回值,這是異步調用,您必須通過與(ERR,DOC)的回調函數來獲取返回值

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

你去那裏:

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工具,並將權限更改爲該用戶。