MongoDB (芒果)
一. 基础概念

  1. 数据: 能够输入到计算机中并被识别处理的信息集合
  2. 数据结构: 研究一个数据集合中,数据之间关系的学科
  3. 数据库: 按照数据结构,存储管理数据的仓库。数据仓库是在数据库管理系统管理控制下在一定介质中构建的。
  4. 数据管理系统 :数据库管理软件,用于维护建立数据库
  5. 数据库系统:是数据库和数据库管理系统等开发工具的集合

二. 关系型数据库 OR 非关系型数据库

  1. 关系型数据库 :采用关系模型(二维表)来组织数据结构的数据库
    【1】常见关系型数据库:Oracle DB2 SQLServer MySql SQLite
    【2】优缺点
优点: * 逻辑清晰,容易理解,结构类似常见的表格
      * 使用sql语句操作,技术成熟,使用方便
      * 数据一致性高
      * 关系型数据库比较成熟,复杂的数据操作较多

缺点: * 每次操作需要专门sql语句解析,降低了速度
* 关系型数据库内部往往进行加锁处理,也影响了处理速度
* 不能很好的处理海量数据并发请求的需要,读写能力差

  1. 非关系型数据库 (NoSql–》Not only sql)
    【1】 常见非关系型数据库
  1. 键值型数据库: Redis
  2. 列存储数据库: HBase
  3. 文档型数据库: Mongodb CouchDB
  4. 图形数据库: Graph

【2】 优缺点

优点: * 读写速度快,可以更好应对并发请求
* 使用灵活,容易扩展

缺点: * 没有sql那样同一的成熟的语句操作
* 技术成熟度较差,缺少复杂的数据操作

【3】 应用场景

  1. 对数据的格式要求比较灵活
  2. 对数据处理速度特别是并发情况下处理速度读要求较高
  3. 某些特定场景:做缓存等

三. MongoDB数据库

  1. 特点
    【1】 非关系型数据库,是文档型数据库
    【2】 开源数据库,使用广泛,更新较快
    【3】 由c++编写的数据库管理系统
    【4】 支持丰富的存储类型和数据操作
    【5】 方便扩展,部署,众多语言提供了操作接口
  2. MongoDB安装
  • Linux : sudo apt-get install mongodb
  • Mac OS : brew install mongodb
  • Windows :www.mongodb.com 下载软件安装

Linux 安装目录

安装位置:/var/lib/mongodb....
  配置文件:/etc/mongodb.conf
  命令集:/usr/bin

cookie :
环境变量 : 系统指定的查找路径。当加载一个文件时如果当前目录找不到会自动从环境变量目录查找

四. MongoDB 命令

  1. mongod 配置mongodb基本信息
    【1】 mongod -h 查看帮助信息
    【2】 mongod --port 8888 设置端口号
    【3】 mongod --dbpath [dir] 设置数据库存储路径
  2. mongo 进入数据库 mongoshell 界面
    【1】 mongo 进入mongoshell界面,即可操作数据库
    【2】 quit() crtl-c 退出界面

五. MongoDB 数据库数据结构

  1. 数据组织结构: 键值对 --> 文档 --> 集合 --> 数据库
    e.g.:

ID

NAME

AGE

1

Lily

17

2

Lucy

18

{
	"_id":1,
	"NAME":"Lily",
	"AGE":17
     },
     {
	"_id":2,
	"NAME":"Lucy",
	"AGE":18
     }
  1. 概念对比

mysql

mongodb

含义

database

database

数据库

table

collection

表/集合

culumn

field

字段/域

row

document

记录/文档

index

index

索引

六. 数据库操作

  1. 创建数据库: use [database]
    e.g. 创建一个stu数据库
    use stu
  • use实际为选择使用哪个数据库,当这个数据库不存在时会自动创建
  • 使用use创建数据库不会立即创建,而是需要插入数据时才真正被创建
  1. 查看系统中数据库: show dbs
  2. 数据库命名规则
    【1】 使用utf-8字符
    【2】 不能含有: 空格 . / \ ‘\0’
    【3】 不超过64字节
    【4】 不要已有数据库重名
  3. 全局变量db : 代表当前正在使用的数据库
  • 如果不选择任何数据库则 db表示‘test’
  1. 删除数据库: db.dropDatabase()
  2. 数据库的备份和恢复
    【1】 数据库备份命令
mongodump -h [host] -d [database] -o [path]

  e.g. 备份当前主机中stu数据库到bak目录下
       mongodump -h  localhost -d stu -o ./bak

【2】 数据库恢复

mongorestore -h [host:port] -d [db] [bak_dir]
 
 e.g. 将stu数据库恢复到当前主机中student数据库下
 mongorestore -h 127.0.0.1:27017 -d student  bak/stu
  1. 数据库监控
  1. 查看数据库运行状态: mongostat

insert

query

update

delete

每秒增查改删的次数

command : 每秒mongo命令的执行次数
flushes : 每秒的磁盘刷新频率
vsize res:使用虚拟内容和物理内存情况
time:时间

  1. 监控数据库中数据读写情况: mongotop

ns

数据集合

total

每秒读写时长

read

每秒读时长

write

每秒写时长

七. 集合操作

  1. 创建集合
    【1】 db.createCollection(collectionName)
    e.g. 创建集合class1
    db.createCollection(‘class1’)
    【2】 插入数据时,如果指定集合不存在会自动创建
e.g.  如果class2不存在则自动创建
 db.class2.insert({'name':'宝强','age':32})

【3】 查看数据库中集合: show collections

【4】 集合命名规则:

  1. 使用utf-8字符
  2. 不能含有’\0’字符
  3. 不要以system.开头,这是系统集合默认开头
  4. 不要和关键字重名
  1. 删除集合: db.collection.drop()
    e.g. 删除class集合
    db.class.drop()
  2. 集合的重命名 : db.collection.renameCollection(newname)
    e.g. 将集合class重命名为class0
    db.class.renameCollection(‘class0’)

八. 文档

  1. 什么是文档?
  • 文档是mongodb数据库中基本的数据组织单元
  • 文档由多个键值对构成,每个键值对表达一个数据项
  • mongodb中文档数据实际为bson数据格式
  1. 文档键值对
    特点:
  • 文档中键值对是无序的
  • 文档中的键不能够重复
  • 文档通过键取值
  • 文档的键为utf-8格式,不能有\0

键 : 表示文档的数据域,即数据的信息含义

值 : 即数据库中存储的数据

数据类型支持 : 见 图 mongo_type

String 字符串
Int 整型
Double 浮点型
Boolean 布尔类型 true false
ObjectId ID对象

  • 在插入数据时,如果不自己指定_id域则会自动添加这个域,值为ObjectId数据,用于作为文档主键

e.g.:
“_id”:ObjectId(“5c95abfcc8c4cf7482cfbadd”)

  1. 集合中的文档设计
    【1】一个集合中的文档尽量表达相同的数据内容
    【2】集合中文档的层次嵌套不宜特别多,如果层次过多时考虑可否拆分为多个集合
    【3】集合中文档相互独立,可以根据实际情况选择不同的域结构

九. 数据基本操作

  1. 插入文档
    【1】 插入单个文档
    命令: db.collection.insertOne(doc)
    e.g. 向class0中插入一个文档
    db.class0.insertOne({‘name’:‘Lucy’,age:18,sex:‘w’})
  • 数据操作时,键可以不加引号,默认为utf-8字符串
  • 可以自己添加_id域,但是_id域的值不能重复

【2】 插入多个文档

命令:db.collection.insertMany([doc,...])

e.g.  同时插入多条文档
db.class0.insertMany([{name:'Abby',age:18,sex:'w'},{name:'Tom',age:17,sex:'m'}])

【3】 一个综合函数

命令: db.collection.insert()

说明:综合insertOne,insertMany功能。官方不推荐

【4】 save保存文档

命令: db.collection.save()

说明: 使用方法同insert(),但是当_id重复时会覆盖原有文档

补充 :

获取集合对象方法: db.getCollection(collectionName)

作业 :

  1. 能够回答关系型数据库和非关系型数据库的区别
  2. 熟练掌握mongo数据库,集合的创建和插入文档
  3. 将mysql中"银行"数据库结构使用mongodb创建,并插入对应文档。