06_MongoDB_存储过程

存储过程

关系型数据库的存储过程描述为:一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它

mongoDB也有存储过程,但是mongoDB是用javascript来写的,这正是mongoDB的魅力。

保存存储过程

mongodb的存储过程是存放在db.system.js表中,我们先来一个简单的例子:

function add(x,y){
	return x+y;
}

 现在我们将这个存储过程保存到db.system.js的表中:

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

 其中:_id和value属性是必须的,如果没有_id这个属性,会导致以后无法调用(到目前为止我还没有找到调用的方式方法,如果大家有什么办法,请回复我。)。你可以增加其他的属性来描述这个存储过程。比如:

> db.system.js.save({"_id":"myAdd1",value:function add(x,y){ return x+y; },"discrption":"x is number ,and y is number"});

 

增加了discrption来描述这个函数。

查询存储过程

可以使用find来查询存储过程,和之前04_MongoDB_查询文档中描述一样例如:

//直接查询所有的存储过程
> db.system.js.find();
{ "_id" : "myAdd", "value" : function __cf__13__f__add(x, y) {
    return x + y;
} }
{ "_id" : "myAdd1", "value" : function __cf__14__f__add(x, y) {
    return x + y;
}, "discrption" : "x is number ,and y is number" }
{ "_id" : ObjectId("5343686ba6a21def9951af1c"), "value" : function __cf__15__f__
add(x, y) {
    return x + y;
} }
//查询_id为myAdd1的存储过程
> db.system.js.find({"_id":"myAdd1"});
{ "_id" : "myAdd1", "value" : function __cf__16__f__add(x, y) {
    return x + y;
}, "discrption" : "x is number ,and y is number" }
>
 执行存储过程

保存好的存储是如何执行的呢?

这里有个牛逼的函数,eval;如果对js了解的人肯定知道这个eval。用来执行一段字符串(描述的比较肤浅,呵呵),在mongodb中使用db.eval("函数名(参数1,参数2...)"),来执行存储过程(函数名找的是_id):

> db.eval('myAdd(1,2)');
3

 eval会找到对应_id属性执行存储过程。

db.eval()是一个比较奇怪的东西,我们可以将存储过程的逻辑直接在里面并同时调用,而无需事先声明存储过程的逻辑。

> db.eval(function(){return 3+3;});
6

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值