第一章、MongoDB基础

学习目标

  • 数据库种类
  • MongoDB简介
  • MongoDB安装
  • MongoDB基本操作
  • MongoDB文档增删修查(CURD)
  • MongoDB实战教学管理系统数据库设计

数据库种类

  • 关系型:Oracle、MySQL、SQLite 、SQL Server等
  • 非关系型(Not Only SQL):MongoDB(文档)、Redis/Memcache(内存)

关系型和非关系型数据库软件区别

  • 相同点:都是数据库软件,用来存放项目数据
  • 不同点:
    关系型:1.遵循SQL标准,换句话说语法大同小异、2.有库和表约束等
    非关系型:1.没有统一标准、2.一般键值对形式存储、3.读取速度更快

关系型和非关系型数据库如何选择:

mongodb 用户 和数据库 的关系 mongodb和关系数据库的区别_CURD标识及语法

1、MongoDB简介

  • MongoDB是一个基于分布式文件存储的数据库,由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。
  • MongoDB是一个介于关系型和非关系型数据库之间的产品,是非关系型数据库当中功能最为丰富,也是最像关系型数据库的。
  • 支持的数据结构非常松散,是类似json的bson格式

JSON(Javascript Object Notation JS对象简谱)是一种轻量级的数据交换格式bson(二进制JSON)

下载版本地址

  • windows版本下载:https://www.mongodb.org/dl/win32
  • linux版本下载:https://www.mongodb.org/dl/linux
  • 社区免费版(自选版本):https://www.mongodb.com/try/download/community
  • 版本说明:
2.x
3.x (3.2 、3.4、3.6 )
4.x (4.2 更佳的数据管理能力、更强的分布式架构、多文档事物等)

mongodb 用户 和数据库 的关系 mongodb和关系数据库的区别_mongodb_02

2、Windows下安装MongoDB

2.1、步骤

  • 步骤1:下载地址:https://www.mongodb.com/try/download/community
  • 步骤2:解压
解压后先在解压目录中创建如下文件夹,用于创建MongoDB服务

mongodb 用户 和数据库 的关系 mongodb和关系数据库的区别_数据库_03

  • 步骤3:创建MongoDB服务
注意:
1:必须要通过管理员身份运行DOS窗口,切换到bin目录下,否则无权限会创建失败
2:得提前创建数据和日志存放目录 (上述我们已创建)

mongodb 用户 和数据库 的关系 mongodb和关系数据库的区别_CURD标识及语法_04

  • 执行如下命令:
#此处的磁盘路径就是我们上述的data文件夹路径
#此处的日志路径就是我们上述的log文件夹路径
mongod.exe --install --dbpath 磁盘路径 --logpath 日志路径

mongodb 用户 和数据库 的关系 mongodb和关系数据库的区别_MongoDB_05


执行上述命令直接回车即可:

mongodb 用户 和数据库 的关系 mongodb和关系数据库的区别_MongoDB_06


去服务中查看MongoDB服务是否创建成功?

mongodb 用户 和数据库 的关系 mongodb和关系数据库的区别_CURD标识及语法_07

  • 步骤4:启动服务
net start mongodb

mongodb 用户 和数据库 的关系 mongodb和关系数据库的区别_CURD标识及语法_08

  • 步骤5:登录(验证是否安装成功)
#连接MongoDB数据库
mongo

mongodb 用户 和数据库 的关系 mongodb和关系数据库的区别_CURD标识及语法_09

  • 关闭服务命令:
net stop mongodb

2.2、Linux系统下安装MongoDB

  • 步骤1:下载curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz
  • 步骤2:解压
    tar -zxvf mongodb-linux-x86_64-3.0.6.tgz
  • 步骤3:将解压包拷贝到指定目录
    mv mongodb-linux-x86_64-3.0.6/ /usr/local/mongodb
  • 步骤4:创建数据存放目录与日志存放目录
    mkdir -p /usr/local/mongodb/data /usr/local/mongodb/logs
  • 步骤5:启动MongoDB服务
    /usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs/mongodb.log --logappend --port=27017 --fork
  • 后期登录即可
    /usr/local/mongodb/bin/mongo

3、启动成功后,为数据库设置登录密码(数据安全)

3.1、查看所有数据库

#查看所有数据库
show databases
show dbs #缩写指令

mongodb 用户 和数据库 的关系 mongodb和关系数据库的区别_数据库_10

3.2、选择admin数据库,并为其设置用户和密码

3.2.1、给admin数据库设置用户和密码及权限角色
db.createUser({user: 'root', pwd: '123456', roles: ['root']})
3.2.2、验证是否设置成功
#这里用db.auth('root', '123456') 
#如果返回 '1'表示验证成功, 如果是 '0' 表示验证失败.
db.auth('用户名','用户密码')

mongodb 用户 和数据库 的关系 mongodb和关系数据库的区别_mongodb 用户 和数据库 的关系_11

4、基本指令操作

  • 查看数据库
show databases #完整形式
show dbs #缩写形式
  • 选择数据库
use admin
  • 查看集合
show collections
  • 创建集合
db.createCollection('集合名')
  • 删除集合
db.集合名.drop()
  • 删除数据库
#第一步
use 数据库名
#第二步
db.dropDatabase()

5、MongoDB文档增删改查(CURD)

5.1、增加数据(Create)

  • 向集合中插入数据
db.集合名.insert({key1:'value1',key2:'value2',……})
  • 查看集合中的数据
db.集合名.find()

留心1:数据库和集合不存在的时候都会隐式创建
留心2:对象的键统一不加引号方便看,但是查看集合数据时系统会自动加
留心3:mongodb会给每条数据增加一个全球唯一的_id键,当然也可以自己赋值把系统自定义的覆盖掉(非常不建议这样做

mongodb 用户 和数据库 的关系 mongodb和关系数据库的区别_数据库_12


mongodb 用户 和数据库 的关系 mongodb和关系数据库的区别_mongodb_13

  • 一次性向集合中插入多条记录
#注意此处的中括号
db.集合名.insert([
	{uname:'lisi',pwd:'654321',age:22},
	{uname:'wangwu',pwd:'123321',age:23},
	{uname:'zhaoliu',pwd:'112233',age:24}
])

mongodb 用户 和数据库 的关系 mongodb和关系数据库的区别_mongodb 用户 和数据库 的关系_14

  • 如何向集合中快速插入十条数据
for(var i=0;i<=10;i++){
	db.集合名.insert(uname:'a'+i,pwd:'pwd'+i,age:i)
}

mongodb 用户 和数据库 的关系 mongodb和关系数据库的区别_CURD标识及语法_15

5.2、查找数据(Read)

  • 按条件查询所有数据
db.集合名.find({},{条件}) #前面的{}也可以不写
  • 语法:
db.集合名.find({ 键:{运算符:值} })

条件:查询所有数据 {}或者不写

  • 查询age=6的数据 ----{age:6}
  • 既要age=6又要性别=男 ----{age:6,sex:‘男’}
  • 查询的列:参数不写 ----是查询全部列
  • 字段 {age:1} 只显示age列(
  • 字段 {age:0} 除了age列其他字段都显示
  • 留心:不管你怎么写系统自定义的_id都会在
  • 运算符:
$gt 大于
$gte 大于等于
$lt 小于
$lte 小于等于
$ne 不等于
$in 在其中
$nin 不在其中
  • 查询年龄大于5的记录
  • 查询年龄为5,岁、8岁、10岁的记录

5.3、修改数据(Update)

  • 将{uname:‘zs1’}修改为{uname:‘zs11’}
db.集合名.update({uname:'zs1'},{{uname:'zs11'})
  • 使用升级语法修改器(将zs4的姓名改为zs44)
db.c3.update({uname:"zs4"}, {$set: {uname: "zs44"}})
  • 修改器语法:
$set #修改列值
$unset #删除列值
$inc #递增
$rename #修改列名(重命名)
  • 给{uname:“zs10”}的年龄加2岁或者减2岁(利用$inc)
  • 综合利用修改器

5.4、删除数据(Delete)

  • 语法:
db.集合名.remove({},true/false) #后面的条件不写默认是false

注意:是否删除一条记录

  • true-是
  • false-否(默认)
  • MongoDB增删改查CURD标识总结:
  • 增Create
db.集合名.insert()
  • 删Delete
db.集合名.remove()
  • 改Update
db.集合名.update()
  • 查Read
db.集合名.find()