在mongodb中调用存储的函数

Ben*_*ied 5 mongodb mongodb-java

我在mongdb中调用存储函数时遇到了一些困难.我和mongo有点新手.

[编辑]:我的函数存储在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
     });
}
Run Code Online (Sandbox Code Playgroud)

我要问的是如何使用reactivemongo或本机API调用此函数.

Nan*_*mar 16

考虑mongo shell中的以下示例,该示例首先保存名为echoFunctionsystem.js集合的函数并使用db.eval()以下函数调用该函数:

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

db.eval("echoFunction('test')") // -> "echo: test"
Run Code Online (Sandbox Code Playgroud)

echoFunction(...)eval/ $where/ mapReduce等.更多信息请访问http://docs.mongodb.org/manual/tutorial/store-javascript-function-on-server

  • 不建议使用db.eval写入输出 (2认同)

byt*_*0de 10

在mongo shell中,您可以使用db.loadServerScripts()来加载当前数据库的system.js集合中保存的所有脚本.加载后,您可以直接在shell中调用函数,如下例所示

db.loadServerScripts();

mySampleFunction(3, 5);
Run Code Online (Sandbox Code Playgroud)


Kho*_*lam 7

有一个特殊的系统集合命名

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; }
 }
);
Run Code Online (Sandbox Code Playgroud)

_id字段保存功能的名称,每个数据库都有唯一的.

字段保存函数定义.

mongo shell中,你可以使用

db.loadServerScripts()

加载system.js当前数据库集合中保存的所有脚本.加载后,您可以直接在shell中调用函数,如下例所示:

db.loadServerScripts();

echoFunction(3);

myAddFunction(3, 5);
Run Code Online (Sandbox Code Playgroud)

资料来源:MONGODB MANUAL


Kiw*_*ela 5

你可以这样调用你的函数

db.loadServerScripts();
db.data.insert({
   _id: myFunction(5),
    name: "TestStudent"
});
Run Code Online (Sandbox Code Playgroud)

如果我的函数使用命令存储在数据库中:

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