Mongodb支持存储过程的使用,存储过程可以接收和输出参数,返回执行存储过程的状态值,也可以嵌套调用。Mongodb的存储过程是使用Javascript编写,并存储在db.system.js表中。我们可以自定义存储过程,然后存入该集合中,具体示例如下:
> db.system.js.save({_id:"addNumbers",value:function(x,y){return x+y;}});
如上面所示:db.system.js.save命令接收2个参数,_id代表存储过程的名字,value代表存储过程的定义。
我们可以对存储过程进行查询、修改和删除,查询使用find()命令:
> db.system.js.find() { "_id" : "addNumbers", "value" : function cf__2__f_(x, y) { return x + y; } }
在mongodb中,如果需要执行存储过程,则需要使用db.evel('procedureName(param1,param2,……)'); 命令,示例如下:
> db.eval('addNumbers(4,15)'); 19 >
除了这种方式之外,我们还可以直接把存储过程的逻辑放在db.eval()参数中直接调用,无需事先声明存储过程的逻辑,如下所示:
示例1:执行存储过程查询posts集合中的文档数目
> db.eval(function(){return db.posts.count();}); 6
示例2:把存储过程本身当做参数传递给db.eval()命令
> db.eval(function(x,y) { return addNumbers(x, y); }, 17, 25) 42关于db.eval()命令详情,参见: http://www.mongodb.org/display/DOCS/Server-side+Code+Execution