2013-08-12 37 views
3

我在mongdb中調用存儲函數時遇到一些困難。 我是一個有點mongo的新手。在mongodb中調用存儲函數

[編輯]:我的功能存儲在MongoDB中

function() { 
    var cndTime = new Date().getTime() - (3600*1000*24*2); // condition 
    db.urls.find(needParse: false).forEach(function(item){ 
     if(item.date < cndTime) // check 
      db.urls.update({_id: item._id}, {$set: { needParse: true }}); // update field 
    }); 
} 

所有我問的是如何使用reactivemongo或本機API來調用這個函數。

+1

能否請你解釋一下你正在試圖完成什麼? – Derick

+2

奇怪的每個人如何在控制檯中回答問題是和被標記爲java':\' – Sammaye

+0

不要在服務器上使用這些功能的javascript函數,因爲他們可以1.只在主要和2.need上運行在整個執行過程中對數據庫執行寫入鎖定,導致吞吐量下降。 – christkv

回答

11

考慮從蒙戈外殼,先保存了一個名爲echoFunctionsystem.js採集功能,並調用下面的示例中使用db.eval()功能:

db.system.js.save({ 
    _id: "echoFunction", 
    value: function (x) { 
     return 'echo: ' + x; 
    } 
}) 

db.eval("echoFunction('test')") // -> "echo: test" 

echoFunction(...)可在eval/$where/mapReduce等詳細信息可在http://docs.mongodb.org/manual/tutorial/store-javascript-function-on-server

+0

這個問題被標記爲java ... – Sammaye

2

在mongo shell中,可以使用db.loadServerScripts()加載保存在當前數據庫的system.js集合中的所有腳本SE。加載一次,你可以在外殼直接調用的功能,如下面的例子

db.loadServerScripts(); 

mySampleFunction(3, 5); 
2

有一個名爲一個特殊的系統收集

system.js

可以存儲JavaScript函數重用。

要存儲的功能,則可以使用

db.collection.save()

,如在下面的例子:

db.system.js.save(
{ 
    _id: "echoFunction", 
    value : function(x) { return x; } 
} 
); 

db.system.js.save(
{ 
    _id : "myAddFunction" , 
    value : function (x, y){ return x + y; } 
} 
); 

_id字段包含函數的名稱並且每個數據庫都是唯一的。

字段包含函數定義。

蒙戈外殼,您可以使用

db.loadServerScripts()

加載保存在system.js集合在當前數據庫中的所有腳本。加載後,您可以在外殼直接調用的功能,如下面的例子:

db.loadServerScripts(); 

echoFunction(3); 

myAddFunction(3, 5); 

來源:MONGODB MANUAL

0

你可以叫你的函數類似這樣的

db.loadServerScripts(); 
db.data.insert({ 
    _id: myFunction(5), 
    name: "TestStudent" 
}); 

如果我的功能存儲在db使用命令:

db.system.js.save(
{ 
    _id : "myFunction" , 
    value : function (x){ return x + 1; } 
    });