存储过程
关系型数据库的存储过程描述为:一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
mongoDB也有存储过程,但是mongoDB是用javascript来写的,这正是mongoDB的魅力。
mongodb的存储过程是存放在db.system.js表中,我们先来一个简单的例子:
现在我们将这个存储过程保存到db.system.js的表中:
创建存储过程代码
其中:_id和value属性是必须的,如果没有_id这个属性,会导致以后无法调用(到目前为止我还没有找到调用的方式方法,如果大家有什么办法,请回复我。)。你可以增加其他的属性来描述这个存储过程。比如:
增加了discrption来描述这个函数。
查询存储过程代码
保存好的存储是如何执行的呢?
这里有个牛逼的函数,eval;如果对js了解的人肯定知道这个eval。用来执行一段字符串(描述的比较肤浅,呵呵),在mongodb中使用db.eval("函数名(参数1,参数2...)"),来执行存储过程(函数名找的是_id):
执行存储过程代码
eval会找到对应_id属性执行存储过程。
db.eval()是一个比较奇怪的东西,我们可以将存储过程的逻辑直接在里面并同时调用,而无需事先声明存储过程的逻辑。
当神已无能为力,那便是魔渡众生