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. .NET跨平台:再见dnx,你好dotnet cli

    昨天在github上dnx的一个issue中看到这样一段话: we're retiring dnx/dnu/dnvm toolchain and will move to dotnet CLI in ...

  2. 配置Linux自动挂载

    使用mount命令来挂载硬件,在Linux重启后这些挂载信息会丢失,因此对应磁盘这类硬件,需要配置自动挂载来保证系统重启时进行自动挂载. 自动挂载信息保存在文件/etc/fstab文件中 查看该文件的 ...

  3. SSRS 迁移

    一.数据库备份 备份源数据库:ReportServer和ReportServerTempDB (注意是全备份) 二.数据库还原 还原之前先停掉SSRS 还原至目标数据库:ReportServer和Re ...

  4. Ajax初步理解

    最近在项目中经常会使用Ajax技术,用法上倒是熟练了,但是只知其然,不知其所以然,抽时间读了读JavaScript高级程序设计中关于Ajax的介绍有了些初步的理解,在此总结一下. 什么是Ajax Aj ...

  5. HTML5中已经不支持元素汇总,持续更新

    HTML5中已经不支持以下的元素,不建议在进行开发时再使用以下的元素. 1.acronym(建议abbr) : 定义首字母缩写 2.applet(建议object):  定义 applet 3.bas ...

  6. atitit.解决net.sf.json.JSONException There is a cycle in the hierarchy

    atitit.解决net.sf.json.JSONException There is a cycle in the hierarchy 1. 环境:使用hibernate4跟个,,要不个哪的对象系列 ...

  7. atitit.GMT UTC Catitit.GMT UTC CST DST CET 星期 月份 节日 时间的不同本质and起源

    atitit.GMT UTC Catitit.GMT UTC CST DST CET 星期 月份 节日 时间的不同本质and起源 1. GMT(Greenwich Mean Time)是格林尼治平时 ...

  8. javascript设计模式与开发实践阅读笔记(7)——迭代器模式

    迭代器模式:指提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示. 迭代器模式可以把迭代的过程从业务逻辑中分离出来,在使用迭代器模式之后,即使不关心对象的内部构造,也可以按顺 ...

  9. LPC18xx LPC43xx LPC4370 Bootrom USB DFU FPB - Flash Patch and Breakpoint Unit

    What is the difference between a Bootrom vs bootloader on ARM systems Bootrom Bootrom (or Boot ROM) ...

  10. C#中服务端接受前端JSON字符串转换成字典集合

    我们是否可以把从前端接受的JSON字符串转换成字典集合呢? 比如从前端接收:{'size':'10', 'weight':'10kg'} 在服务端转换成:[{size:"10"}, ...