MongoDB

293 阅读4分钟

数据库是一门学科,专门做数据库运维的人叫Database Administrator,简称DBA,有的DBA指深入专研一种数据库。


1.什么是关系型数据库?
  关系型数据库: 以行和列的形式存储数据,以便于用户理解。
  这一系列的行和列被称为表,一组表组成了数据。
  表与表之间的数据记录有关系。
  例如:Access  mySql SqlServer oracle  db2等。
  
2.非关系型数据库
  MongoDB,Redis,HBase,CouchDB等。
关系型数据库和非关系型数据库的区别
非关系型数据库的优势:
1.性能	
NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL层的解析,所以性能非常高。
2. 可扩展性
同样也是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展。

关系型数据库的优势:
1. 复杂查询
可以用SQL语句方便的在多个表之间做非常复杂的数据查询。
2. 事务支持
使得对于安全性能很高的数据访问要求得以实现。

学习要求

1.了解数据库发展历史。(面试用)
2.会安装MongoDB和配置环境变量。
3.学会常用的命令。
4.学会用后端语言进行MongoDB的CRUD操作。

mongodb的简介

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。分布式算法指的是将一个大型的任务进行分解,将每一个小任务的执行结果组合起来,返回一个整体

好处:给其他任务提供了可执行的机会

MongoDB 是非关系型数据库当中功能最丰富,最像关系型数据库的。

  • 优点:
  1. 面向集合存储,易存储对象类型的数据。
  2. 模式自由。
  3. 支持动态查询。
  4. 支持完全索引,包含内部对象。
  5. 支持查询。
  6. 支持复制和故障恢复。
  7. 使用高效的二进制数据存储,包括大型对象(如视频等)。
  8. 自动处理碎片,以支持云计算层次的扩展性
  9. 支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
  10. 文件存储格式为BSON(一种JSON的扩展)

BSON

BSON是一种类似json的二进制形式的存储格式,简称Binary JSON,它和JSON一样,支持内嵌的文档对象和数组对象,但是BSON有JSON没有的一些数据类型,如Date和BinData类型。

BSON可以做为网络数据交换的一种存储形式,这个有点类似于Google的Protocol Buffer,但是BSON是一种schema【骨架】-less的存储形式,它的优点是灵活性高,但它的缺点是空间利用率不是很理想。

BSON有三个特点:轻量性、可遍历性、高效性。

总结

1. 数据库功能是用来存储数据的。

2. 数据库分为关系系数据库和非关系型数据库(nosql)

3. 关系型数据库是由表和表之间的关系组成的,nosql是由+集合组成的,集合下面是很多的文档。

4. 非关系型数据库文件存储格式为BSON(一种JSON的扩展)。

MongoDB的基本操作

  • mongo.exe 负责使用数据库
  • mongod.exe 负责开机
  • mongodump.exe 数据备份
  • mongoexport.exe 数据导出
  • mongoimport.exe 数据导入
  • mongorestore.exe 数据还原

1.启动mongodb服务

net start MongoDB

2.关闭mongodb服务

net stop MongoDB

3.显示数据库列表 

show dbs

4.创建数据库 

use dbname

5.增加数据(重点中的重点)

db.web.save({"name":"老李"})

创建了名为web的集合,并新增了一条{"name":"老李}的数据

db.web.insert({"name":"ghost","age":10})

在web集合中插入一条新数据,如果没有web这个集合,mongodb会自动创建save()和insert()也存在着些许区别:

若新增的数据主键已经存在,insert()会不做操作并提示错误,而save()则更改原来的内容为新内容。

 6.删除数据库

db.users.remove({}) 删除users集合下所有数据

db.users.remove({"name":"lecaf"}) 删除users集合下name=”lecaf”的数据

db.users.drop()或db.runCommand({"drop":"users"}) 删除集合users

db.runCommand({"dropDatabase": 1}) 删除当前数据库,注意 此处的1没加双引号。

7.查找数据(重点中的重点)

db.users.find()查找users集合中所有数据

db.users.findOne() 查找users集合中的第一条数据

db.users.find().pretty() 格式化查询到的数据

Sort排序db.webs.find().sort({age: -1 }) -1代表倒序,1代表顺序

Limit 类似截取 db.webs.find().limit( 2 ) 截取前两条数据,如果参数是0,则没有约束,limit()将不起作用

8.修改数据(重点中的重点)

db.web.update({"name":"a1"}, {$set:{sex:”women”}},true,true)

修改name=a1的数据为sex=1,第一个参数是查找条件,第二个参数是修改内容,主键不能修改,第三个参数表示匹配所有符合条件的数据,第四个参数表示修改所有匹配到的数据如图

db.collection.find({ "key" :{ $gt: "value" }}) key > value

$gt  >

$lt  <

$gte  >=

$lte  <=

$ne 不等于 ---db.collection.find({ "key" :{$ne: value }}) 

$mod 取模
--- db.collection.find({ "key": { $mod : [ 10 , 1 ] } }) 
取模运算,条件相当于key%10==1即key除以10余数为1的

$in属于
--- db.collection.find({"key": { $in: [ 1, 2, 3 ] } }) ,条件相当于key等于[ 1, 2, 3 ]中任何一个.

$nin不属于

$exists --- db.collection.find({ "key": { $exists : true|false } })
$exists --- 字段存在,true返回存在字段key的数据,false返回不存在字段key的数据

$or 或者 ---db.collection.find({ $or : [{a : 1}, {b : 2} ] }) 

对某个字段建立一个索引

image

语法中name的 Key 值为你要创建的索引字段,1为指定按升序创建索引,如果你想按降序来创建索引指定为-1即可。