mongoDB数据库
1、mongoDB简介:mongoDB 为非关系数据库,集合(collection)关系数据库中的表,中存储的为json结构的文档,集合中的每一条记录都可以结构不同,
但必须都有_id字段(mongoDB默认的Object类型的标识)。
2、mongoDB安装:教程链接:Windows下:http://jingyan.baidu.com/article/d5c4b52bef7268da560dc5f8.html
Linux下:http://jingyan.baidu.com/article/fd8044faf4f3a95030137a79.html
3、mongoDB初级查询语句:
| mongoDB语句 | 对应的SQL语句 |
| 新建数据库:use mydb;//新建一个数据库mydb | create database mydb |
| 查看数据库列表:show dbs //mongoDB自带测试数据库 | |
|
新建集合:db.student.insert({'name':'lily',age:NumberInt('18','sex':'女')}) 插入新的数据,mongoDB自动创建集合,无数据的集合不会显示在列表中 |
create table student(
id varchar(30),
name varchar(30),
age int,
sex varchar(10),
primary key (id)
)
|
| 查询全部:db.collection.find(); | select * from collection; |
|
条件查询:db.collection.find({age:18}) db.collection.find({'sex':'男'}) db.collection.find({age:{$gt:18}}) db.collection.find({age:{$gte:18}}) db.collection.find({age:{$lt:18}}) db.collection.find({age:{$lte:18}}) |
select * from collection where age=18; select * from collection where sex='男'; select * from collection where age>18; select * from collection where age>=18; select * from collection where age<18; select * from collection where age<=18; |
| 查询数量:db.collection.find({age:18}).count(); | select count(*) from collection where age=18; |
| 分页查询:db.collection.find({age:18}).limit(10).skip(5); | select * from collection where age=18 limit 5,10; |
| 查询指定字段:db.collection.find({age:18},{name:1}) | select name from collection where age=18; |
| 插入数据:db.collection.insert({'name':'lucy',age:28}) | insert into collection(name,age) values('lucy',28) |
| 删除数据:db.collection.drop({'name':'lucy'}) | delete from collection where name='lucy' |
| 更新数据:db.collection.update({'name':'lily'},{$set:{age:19}}) | update collection set age=19 where name='lily'; |
| 模糊条件查询:db.collection.find({'name':/li/}) | select * from collection where name like %li%; |
| 删除集合:db.collection.drop(); | drop table collection; |
|
删除数据库 ues mydb db.dropDatebase(); |
4、mongoDB 高级查询:
A、聚合:mongoDB 中的aggregate()方法,相当于mysql中的group by。基本语法是:db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION);
eg:db.collection.aggregete([{$match:{age:18}},{$group:{_id:'sex',num:{$sum:1}}}])
对应SQL:select sex count(*) from collection where age=18 group by sex;
B、排序:mongoDB 中的sort()方法,相当于mysql中的order by 。
eg:db.collection.find({'sex':'男'}).sort({age:1});
对应SQL:select * from collection where sex='男' reder by age ASC
db.collection.find({'sex':'男'}).sort({age:-1});
对应SQL:select * from collection where sex='男' reder by age DESC
C.去重:mongoDB中的distinct()方法去重。
eg:db.collection.distinct("name")
对应SQL:select distinct(name) from collection;
D、执行分析:mongoDB中用explain()分析执行过程。
eg:db.collection.find({age:18}).explain();
对应的SQL:explain select * from collection where age=18;
附:explain参数详解:https://my.oschina.net/foreverhui/blog/639240?p={{totalPage}}
5、mongoDB 特有查询:
a、$all匹配所有值
这个操作和SQL的in类似,但是in只需要满足其中的一个值即可,而$all则需要满足所有值。
eg:db.collection.find({age:{$all:[20,21]}})
可以查询出age[20,21,22]但查不出age[20,22,23]即必须同时有20和21。
b、$in查询包含的值
这个操作相当于SQL中的in。
eg:db.collection.find({age:{$in:[20,21]}})
c、$exists判断字段是否存在
eg:查询存在age字段的记录
db.collection.find({age:{$exists:true}})
查询不存在age字段的记录
db.collection.find({age:{$exists:false}})
d、null值的处理
mongoDB 中的null值处理不仅会返回某一字段为null的记录,还会返回不存在该字段的记录
eg:db.collection.find({age:null})
查询结果既有age字段为null的记录还会有不存在age字段的记录。如果需要只查出age字段为null的记录,需要配合$exists
eg:db.collection.find({age:{'$in':[null],'$exists':true}})
查询结果为存在age字段且该字段的值为null
e、$mod取模运算
eg:db.collection.find({age:{$mod:[5,3]}})
查询age取模5为3的记录。
f、$ne不等于操作
eg:db.collection.find({age:{$ne:18}})
g、$nin不包含操作
eg:db.collection.find({age:{$nin:[18,19,20]}})
查询age不等于 18、19、20的记录。
h、JavaScript查询和$where查询
eg:查询年龄大于18的记录有以下四种方式
条件操作符:db.collection.find({age:{$gt:18}})
$where 方式:db.collection.find({$where:'this.age>18'})
内部对象查询:db.collection.find("this.age>18")
JavaScript查询:func = function(){return this.age>18}
db.collection.find(func)
j、存储过程
创建存储过程:db.system.js.save({_id:'addNum',value:function(x,y){return x+y}})
查看所有存储过程:db.system.js.find()
调用存储过程:db.eval("addNum(2,3)")
同时可以直接用db.eval()创建并调用存储过程
db.eval(function (){return 2+3;})
存储过程可以处理数据库内部的操作
db.system.js.save({_id:"getCount",value:function(){return db.collection.find({age:{$gt:18}}).count()}})
将collection中age大于18的记录的数量保存在getCount这个存储过程中,调用时db.eval("getCount()")就可以直接得到那个数量
mongoDB数据库的更多相关文章
- Mongodb数据库学习系列————(一)Mongodb数据库主从复制的搭建
Mongodb数据库主从复制的搭建 Writeby:lipeng date:2014-10-22 最近项目上用到了位置查询,在网上 ...
- 基于C#的MongoDB数据库开发应用(4)--Redis的安装及使用
在前面介绍了三篇关于MongoDB数据库的开发使用文章,严格来讲这个不能归类于MongoDB数据库开发,不过Redis又有着和MongoDB数据库非常密切的关系,它们两者很接近,Redis主要是内存中 ...
- FineReport如何连接和使用MongoDB数据库
随着NoSQL数据库越来越流行,MongoDB数据库作为NoSQL数据库中的领头羊,使用也越来越广泛.为此,FineReport V8.0版本提供了数据连接和数据集接口,可以通过开发一款可以连接和使用 ...
- python操作mongodb数据库
一.MongoDB 数据库操作 连接数据库 import pymongo conn = pymongo.Connection() # 连接本机数据库 conn = pymongo.Connection ...
- NoSql 中Mongodb数据库的使用
1.NoSql数据库简介 2.MongoDB数据库的简介 3.MongoDB下Windows下的安装
- 线上mongodb数据库mLab使用总结
最近在CNode社区看到有人分享了免费的线上mongodb数据库(容量500M),今天去注册了一下,成功的将线下数据库替换掉了,现在就说一下它的使用和配置需要注意的地方: mLab是一款免费的在线mo ...
- mongoDB数据库和Spring MVC的整合
之前一直用到的项目是Spring MVC+maven+mysql的,最近有些数据需要用到mongoDB数据库,现在做一些总结. 第一步:加载jar.maven配置 <!-- mongodb开始 ...
- 【转载】CentOS6.5_X64下安装配置MongoDB数据库
[转载]CentOS6.5_X64下安装配置MongoDB数据库 2014-05-16 10:07:09| 分类: 默认分类|举报|字号 订阅 下载LOFTER客户端 本文转载自zhm&l ...
- 基于C#的MongoDB数据库开发应用(3)--MongoDB数据库的C#开发之异步接口
在前面的系列博客中,我曾经介绍过,MongoDB数据库的C#驱动已经全面支持异步的处理接口,并且接口的定义几乎是重写了.本篇主要介绍MongoDB数据库的C#驱动的最新接口使用,介绍基于新接口如何实现 ...
- 基于C#的MongoDB数据库开发应用(2)--MongoDB数据库的C#开发
在上篇博客<基于C#的MongoDB数据库开发应用(1)--MongoDB数据库的基础知识和使用>里面,我总结了MongoDB数据库的一些基础信息,并在最后面部分简单介绍了数据库C#驱动的 ...
随机推荐
- java的三大框架(一)
现在许许多多的初学者和程序员,都在趋之若鹜地学习Web开发的宝典级框架:Struts2,Spring,Hibernate.似乎这些框架成为了一个人是否精通Java,是否会写J2EE程序的唯一事实标准和 ...
- Django后台post请求中的csrf token
使用Requests库操作自己的Django站点,post登陆admin页面返回403,serverlog显示csrf token not set. csrf token是get登陆页面时服务器放在c ...
- js本地图片预览
相信大家都遇到过上传图片之前预览,网上找了很多,但都不是所有浏览器都支持,不过后来找到一个,但自己没有完全实验. 代码如下: <script> //使用IE条件注释来判断是否IE6,通过判 ...
- 05_动手动脑之String.equals()方法的实现代码
Question: 请查看String.equals()方法的实现代码,注意学习其实现方法. Answer: java中的String.equals()方法的实现代码: equals()法是根类Obj ...
- 面向amd64的XXX与与项目的目标平台“x86”不兼容
打开IIS服务器,选择应用程序池,设置中,有一个打开32位程序,选择FALSE,如果开启,在64位下就会出错.一般关闭
- linux云服务器mysql ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’
一早上过来发现网站打开报错,数据库连接不上.. 有人改密码? putty进去,mysql -uroot -p 输入密码后,报错 ERROR 2002 (HY000): Can't connect to ...
- powerdesinger
www.sap.com solutions>data management>powerdesinger http://www.sap.com/product/data-mgmt/power ...
- 在工作有时候centos6.5系统使用rpm包安装mysql5.7出现的问题
首先说明一下,我用的CentOS版本是6.6,64位.打印机驱动程序是两个rpm安装包:cndrvcups-common-2.60-1.x86_64.rpm和cndrvcups-capt-2.60-1 ...
- SQL:安装多个实例,修改实例端口号,和IP加端口号连接实例
sql server 安装第一个实例,默认实例的端口是1433, 一个库中如果有多个实例,从第二个实例开始的端口是动态端口,需要的话,自己手工指定为静态端口,如指定第二个实例为1434 或着随意一个如 ...
- View加载过程
1. 先判断子类是否重写了loadView,如果有直接调用.之后调viewDidLoad完成View的加载.2 .如果是外部通过调用initWithNibName:bundle指定nib文件名的话,V ...