mongoDB存储过程

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介: 存储过程 关系型数据库的存储过程描述为:一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。 mongoDB也有存储过程,但是mongoDB是用javascript来写的,这正是mongoDB的魅力。

存储过程

关系型数据库的存储过程描述为:一组为了完成特定功能的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来查询存储过程,和之前MongoDB查询文档中描述一样例如:

查询存储过程代码

 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  

 

当神已无能为力,那便是魔渡众生
相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
存储 分布式计算 NoSQL
在mongodb服务器上存储和执行 js 函数 - 存储过程
虽然官方不推荐使用将业务逻辑存储在数据库中,并且提示在 mongodb 中执行 javascript 存在性能限制。 但实际上,将 javascript 函数存储在 mongodb 中执行,还是非常有必要的,更方便,许多场景下性能会更好(在执行大量查询处理时不需要将数据传回客户端引擎)。 在目前的版本中,我们任然可以将 javascript 函数存储在 mongodb 内置的一个特殊集合 db.system.js 中,然后这些变量就可以在任何 mongodb 的 javascript 上下文中调用,包括:db.eval()、$where子句、mapReduce。 自从 mongodb 3
797 0
|
存储 JavaScript NoSQL
《MongoDB管理与开发精要》——3.4节游标和存储过程
本节书摘来自华章社区《MongoDB管理与开发精要》一书中的第3章,第3.4节游标和存储过程,作者:红 丸,更多章节内容可以访问云栖社区“华章社区”公众号查看
1322 0
|
存储 NoSQL JavaScript
|
4月前
|
JSON NoSQL 小程序
Mongodb数据库的导出和导入总结
Mongodb数据库的导出和导入总结
206 0
|
12天前
|
NoSQL MongoDB 数据库
MongoDB数据恢复—MongoDB数据库文件被破坏的数据恢复案例
服务器数据恢复环境: 一台Windows Server操作系统服务器,服务器上部署MongoDB数据库。 MongoDB数据库故障&检测: 工作人员在未关闭MongoDB数据库服务的情况下,将数据库文件拷贝到其他分区。拷贝完成后将原MongoDB数据库所在分区进行了格式化操作,然后将数据库文件拷回原分区,重新启动MongoDB服务,服务无法启动。
|
15天前
|
NoSQL MongoDB Redis
Python与NoSQL数据库(MongoDB、Redis等)面试问答
【4月更文挑战第16天】本文探讨了Python与NoSQL数据库(如MongoDB、Redis)在面试中的常见问题,包括连接与操作数据库、错误处理、高级特性和缓存策略。重点介绍了使用`pymongo`和`redis`库进行CRUD操作、异常捕获以及数据一致性管理。通过理解这些问题、易错点及避免策略,并结合代码示例,开发者能在面试中展现其技术实力和实践经验。
144 8
Python与NoSQL数据库(MongoDB、Redis等)面试问答
|
2月前
|
NoSQL 网络协议 MongoDB
Windows公网远程连接MongoDB数据库【无公网IP】
Windows公网远程连接MongoDB数据库【无公网IP】
|
2月前
|
存储 NoSQL 关系型数据库
一篇文章带你搞懂非关系型数据库MongoDB
一篇文章带你搞懂非关系型数据库MongoDB
58 0
|
2月前
|
人工智能 NoSQL MongoDB
|
3月前
|
SQL NoSQL Java
文档型数据库MongoDB
文档型数据库MongoDB