博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mongoDB存储过程
阅读量:7144 次
发布时间:2019-06-29

本文共 1614 字,大约阅读时间需要 5 分钟。

存储过程

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

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

保存存储过程

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

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

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

创建存储过程代码

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

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

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

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

查询存储过程

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

查询存储过程代码

1 //直接查询所有的存储过程   2 > db.system.js.find();   3 { "_id" : "myAdd", "value" : function __cf__13__f__add(x, y) {   4     return x + y;   5 } }   6 { "_id" : "myAdd1", "value" : function __cf__14__f__add(x, y) {   7     return x + y;   8 }, "discrption" : "x is number ,and y is number" }   9 { "_id" : ObjectId("5343686ba6a21def9951af1c"), "value" : function __cf__15__f__  10 add(x, y) {  11     return x + y;  12 } }  13 //查询_id为myAdd1的存储过程  14 > db.system.js.find({"_id":"myAdd1"});  15 { "_id" : "myAdd1", "value" : function __cf__16__f__add(x, y) {  16     return x + y;  17 }, "discrption" : "x is number ,and y is number" }  18 >

执行存储过程

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

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

执行存储过程代码

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

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

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

执行存储过程代码

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

 

当神已无能为力,那便是魔渡众生

转载地址:http://urwgl.baihongyu.com/

你可能感兴趣的文章
Jquery中ajax方法data参数的用法
查看>>
sqlserver巧用row_number和partition by分组取top数据
查看>>
Quartz 2D
查看>>
Eclipse 快捷键
查看>>
VC++ 设置软件开机自启动的方法
查看>>
MyBatis学习(三)、动态SQL语句
查看>>
PLSQL:[1]plsql中文乱码,显示问号
查看>>
将十进制转成十六进制
查看>>
【题目】英文字符进行频率的统计,直方图输出
查看>>
Ztree手风琴效果(第三版)
查看>>
「坐上时光机,查找编译压缩后的文件最初的样子」gulp-sourcemaps 使用说明
查看>>
java 泛型中 T、E ... 和 问号(通配符)的区别
查看>>
MyEclipse使用总结——MyEclipse去除网上复制下来的来代码带有的行号
查看>>
java service wrapper日志参数设置及优化
查看>>
android build.prop详解
查看>>
Spring aop 切面编程
查看>>
C3P0连接池使用教程
查看>>
数据结构——红黑树
查看>>
高通平台MSM8916LCM模块移植(一)-bootloader部分【转】
查看>>
oracle表空间不足相关问题解决办法
查看>>