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. C语言 对称矩阵 压缩 实现

    对称矩阵压缩的简单实现 (GCC编译). /** * @brief C语言 对称矩阵 压缩 实现 * @author wid * @date 2013-11-03 * * @note 若代码存在 bu ...

  2. 作业七:团队项目——Alpha版本冲刺阶段

      本次作业为期三周时间,要求各组结合所选项目并阅读教材<构建之法>第六章内容,完成项目的Alpha版本.本阶段的主要内容如下:(20分) 1. 每天组织一次站立会议,讨论每个成员的昨天进 ...

  3. [游戏模版8] Win32 透明贴图

    >_<:The same with previous introduction. In the InitInstance fanction make a little change: &g ...

  4. Marbles启动信息

    body-parser deprecated undefined extended: provide extended option app.js:40:20 -------------------- ...

  5. 老生常谈: Javascript 面向对象编程初探(一)--- 封装

    Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象.但是,它又不是一种真正的面向对象编程(OOP)语言,因为它的语法中没有class(类). 那么,如果 ...

  6. fir.im Weekly - 如果让你重新做一款APP

    设想下:如果让你重新做一款 APP ,你会用到哪些开发.设计等资源和工具? 本期的 Weekly 为大家分享了最近不错的 APP 开发资源,大部分是关于 iOS 开发. Android 开发.UI设计 ...

  7. animate.css

    这是个css3动画框架,现在很流行,在小动画效果有很多,使用的方式 <div class="animated bounce"></div> /*只要修改bo ...

  8. jQuery 之父:每天写代码

    去年秋天我的支线代码项目 遇到了一些问题,项目进展不足,而且我没法找到一个完成更多代码的方法(在不影响我在Khan Academy方面的工作的前提下). 我主要在周末进行我的支线,当然有时候也在晚上进 ...

  9. C#中的串口通信

    关于串行接口 串行接口(Serial port)又称“串口”,主要用于串行式逐位数据传输.常见的有一般电脑应用的RS-232(使用 25 针或 9 针连接器)和工业电脑应用的半双工RS-485与全双工 ...

  10. Spring MVC+Quartz 定时任务持久化

    请自行参考: http://sloanseaman.com/wordpress/2011/06/06/spring-and-quartz-and-persistence/ https://object ...