MongoDB支持存储过程的使用,它的存储过程是用javascript实现的,被存在于system.js表中,可以接收和输出参数,返回执行存储过程的状态值,也可以嵌套调用。

    所以我理解的MongoDB的存储过程就是

把javascript变量,存储到MongoDB的数据库的特殊集合:system.js表中,然后这些变量可以在何MongoDB的javascript上下文中调用,包括"$where"子句,db.eval调用,MapReduce作业。

1.添加存储过程

  db.system.js.save({_id:存储过程名称,value:存储过程体})  //添加一个新的存储过程或者更新一个已经存在的存储过程

  或者
  db.system.js.insert({_id:存储过程名称,value:存储过程体}) //添加一个新的存储过程
 其中:_id和value属性是必须的,如果没有_id这个属性,会导致无法调用。也可以增加其他的属性来描述这个存储过程。比如:
  db.system.js.insert({_id:存储过程名称,value:存储过程体,discrption:"这是存储过程"})
2.修改存储过程
  db.system.js.update({_id:存储过程名称},{value:存储过程体})
3.执行存储过程
  db.eval('存储过程名称(参数)')
4.查找存储过程   
  db.system.js.find();

以上命令都可以在mongodb shell命令窗口下执行,也可以写在javascript文件里执行。
下面的示例写在javascript文件里。
连接数据库有两种方法,如下,示例里面用的方法1
方法1:
db = connect("localhost:port/myDatabase");

方法2:
new Mongo() 或者 new Mongo(<host>) 或者 new Mongo(<host:port>)
conn = new Mongo();
db = conn.getDB("myDatabase");

新建test.js,代码如下: 
var db = connect( 'school' ); //连接的数据库名字为:school
db.courses.save({name:"英语",time:'周二 上午 8:00-9:50'});
db.courses.save({name:"数学",time:'周二 上午 10:00-12:00'});
db.courses.save({name:"语文",time:'周二 下午午 2:00-4:00'});
db.people.save({name:'刘湘',type:'teacher',age:28});
db.people.save({name:'王莎莎',type:'student',age:12}); //1.添加存储过程
//db.system.js.save({_id:存储过程名称,value:存储过程体})
db.system.js.save({_id:"getCoursesCount",value:function(){return db.courses.count();},description:'获取课程数'}); //db.system.js.insert({_id:存储过程名称,value:存储过程体})
db.system.js.insert({
_id:"getPeople",
value:function(type){
return type;
},
description:'显示根据类型显示人员'
}); //2.修改存储过程
//db.system.js.update({_id:存储过程名称},{value:存储过程体})
db.system.js.update({
_id:"getPeople"},{
value:function(type){
if(type==null){
return db.people.find().toArray();
}else {
return db.people.find({type:type}).toArray();
}
}
}); //3.执行存储过程
//db.eval('存储过程名称(参数)')
var obj=db.eval("getPeople()");
print(JSON.stringify(obj));
var obj1=db.eval("getPeople('student')");
print(JSON.stringify(obj1));
print(db.eval("getCoursesCount()")); //4.查找存储过程
//db.system.js.find();
var obj2= db.system.js.find();
print(JSON.stringify(obj2.toArray()));

找到test.js的文件位置,我的文件位置如下图,然后按住shift键,点击鼠标右键弹出一个菜单,选择 【在此处打开命令窗口(W)】

弹出命令窗口,接下来运行test.js,会有两种方法

方法1:

在命令窗口输入mongo test.js,按回车键,test.js就会被运行,如下图

方法2:在命令窗口输入 mongo 按回车键,然后输入load('test.js'),这样test.js也会被运行,如下图:

mongodb存储过程的更多相关文章

  1. MongoDB存储过程创建和使用一例

    mongo的脚本是js语法,所以存储过程也是js语法. 创建: db.system.js.save( { _id: "saveAndCount", value : function ...

  2. mongodb use where and custom function to query mongodb存储过程

    function name regexObjSubObjKey function code function(proto,value) { var match=false; var reg = new ...

  3. mongoDB数据库和Spring MVC的整合

    之前一直用到的项目是Spring MVC+maven+mysql的,最近有些数据需要用到mongoDB数据库,现在做一些总结. 第一步:加载jar.maven配置 <!-- mongodb开始 ...

  4. MongoDB应用篇(转)

    一.高级查询 1. 查询操作符 1.1 比较操作符$gt,$lt,$gte,$lte 实例: select * from things where field<value -- 等价于db.th ...

  5. mongodb进阶一之高级查询

    上篇文章我们讲了mongodb的crud基本操作 http://blog.csdn.net/stronglyh/article/details/46812579 这篇我们来说说mongodb的进阶-- ...

  6. 【Mongodb教程 第十八课 】MongoDB常用命令 数据库命令 集合操作命令

    面向文档的 NoSQL 数据库主要解决的问题不是高性能的并发读写,而是保证海量数据存储的同时,具有良好的查询性能.  条件操作符 <, <=, >, >=  这个操作符就不用多 ...

  7. 在MongoDB中执行查询与创建索引

    实验目的: (1)掌握MongoDB中数据查询的方法: (2)掌握MongoDB中索引及其创建: 实验内容: 一. MongoDB中数据查询的方法: (1)find函数的使用: (2)条件操作符: a ...

  8. NoSql---MongoDB基本操作

    MongoDB 最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语 言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引.最后由于 MongoDB 可以支 ...

  9. Mongo管理

    MongoDB存储引擎 一. WiredTiger引擎 1.  MongoDB3.2版本以上,设置为存储引擎. 2. 基于文档级别的并发控制功能(锁机制) (1).    锁级别:文档级别 (2). ...

随机推荐

  1. [MSSQL] Useful SQL Scripts - CalendarBase

    Useful SQL scripts DECLARE @StartDate DATETIME DECLARE @EndDate DATETIME DECLARE @FiscalBeginMonth I ...

  2. Nim教程【五】

    妈蛋,花了两天时间才搞定博客园的API, 比预期的时间整整多了1天, 不管怎么说,总算把博客园的客户端搞定了 这篇文章就是用博客园的客户端发布的, 先贴张图,给大家看看, 后面我会和博客园的领导商量一 ...

  3. AlwaysOn--查看可用性组的首先备份节点

    在Alwayson中,可以通过设置来将备份放到指定的节点上完成,微软提供了函数用来判断当前指定节点进行备份: ) SET @database_name= 'DB5' SELECT CASE [mast ...

  4. Html5 学习系列(五)Canvas绘图API快速入门(2)

    Canvas绘图API Demos 上一篇文章中,笔者已经给大家演示了怎么快速用Canvas的API绘制一个矩形出来.接下里我会在本文中给各位介绍Canvas的其他API:绘制线条.绘制椭圆.绘制图片 ...

  5. RabbitMQ(二) -- Work Queues

    RabbitMQ(一) -- Work Queues RabbitMQ使用Work Queues的主要目的是为了避免资源使用密集的任务,它不同于定时任务处理的方式,而是把任务封装为消息添加到队列中.而 ...

  6. Ubuntu命令--CURL用法

    curl命令是个功能强大的网络工具,支持通过http.ftp等方式下载文件.上传文件.还可以用来抓取网页.网络监控等方面的开发,解决开发过程中遇到的问题. 常用参数curl命令参数很多,这里只列出我曾 ...

  7. [Python爬虫] Selenium+Phantomjs动态获取CSDN下载资源信息和评论

    前面几篇文章介绍了Selenium.PhantomJS的基础知识及安装过程,这篇文章是一篇应用.通过Selenium调用Phantomjs获取CSDN下载资源的信息,最重要的是动态获取资源的评论,它是 ...

  8. 安装完grunt和grunt-cli仍然无法识别grunt

    如题: 在安装完grunt-cli和grunt之后,仍然不识别grunt. 反复确认是-g安装... 原因: 有可能是nodejs安装出现问题,到时npm的路径没有出现在环境变量里面. 把C:\Use ...

  9. jquery时间倒计时

    代码: js: function countDown(time, id) {  //time的格式yyyy/MM/dd hh:mm:ss    var day_elem = $(id).find('. ...

  10. gulp学习笔记2

    gulp系列学习笔记: 1.gulp学习笔记1 2.gulp学习笔记2 3.gulp学习笔记3 4.gulp学习笔记4 1. 压缩 CSS 压缩 css 代码可降低 css 文件大小,提高页面打开速度 ...