MongoDB
一、简介
1.1 Mongodb 是什么
MongoDB 是一个基于分布式文件存储的数据库,官方地址 https://www.mongodb.com/
1.2 数据库是什么
数据库(DataBase)是按照数据结构来组织、存储和管理数据的 应用程序
1.3 数据库的作用
数据库的主要作用就是 管理数据 ,对数据进行 增(c)、删(d)、改(u)、查(r)
1.4 数据库管理数据的特点
相比于纯文件管理数据,数据库管理数据有如下特点:
- 速度更快
- 扩展性更强
- 安全性更强
1.5 为什么选择 Mongodb
操作语法与 JavaScript 类似,容易上手,学习成本低
二、核心概念
Mongodb 中有三个重要概念需要掌握
- 数据库(database) 数据库是一个数据仓库,数据库服务下可以创建很多数据库,数据库中可以存放很多集合
- 集合(collection) 集合类似于 JS 中的数组,在集合中可以存放很多文档
- 文档(document) 文档是数据库中的最小单位,类似于 JS 中的对象
大家可以通过 JSON 文件来理解 Mongodb 中的概念
1 | { |
- 一个 JSON 文件 好比是一个 数据库 ,一个 Mongodb 服务下可以有 N 个数据库
- JSON 文件中的 一级属性的数组值 好比是 集合
- 数组中的对象好比是 文档
- 对象中的属性有时也称之为 字段
三、下载安装与启动
下载地址: https://www.mongodb.com/try/download/community
建议选择 zip 类型, 通用性更强
配置步骤如下:
1> 将压缩包移动到 C:\Program Files 下,然后解压
2> 创建 C:\data\db 目录,mongodb 会将数据默认保存在这个文件夹
3> 以 mongodb 中 bin 目录作为工作目录,启动命令行
4> 运行命令 mongod
看到最后的 waiting for connections 则表明服务 已经启动成功
然后可以使用 mongo 命令连接本机的 mongodb 服务
四、命令行交互
命令行交互一般是学习数据库的第一步,不过这些命令在后续用的比较少,所以大家了解即可
4.1 数据库命令
显示所有的数据库
1
show dbs
切换到指定的数据库,如果数据库不存在会自动创建数据库
1
use 数据库名
显示当前所在的数据库
1
db
删除当前数据库
1
2use 库名
db.dropDatabase()
4.2 集合命令
创建集合
1
db.createCollection('集合名称')
显示当前数据库中的所有集合
1
show collections
删除某个集合
1 | db.集合名.drop() |
重命名集合
1
db.集合名.renameCollection('newName')
4.3 文档命令
插入文档
1
db.集合名.insert(文档对象);
查询文档
1
db.集合名.find(查询条件)
_id 是 mongodb 自动生成的唯一编号,用来唯一标识文档
更新文档
1
2db.集合名.update(查询条件,新的文档)
db.集合名.update({name:'张三'},{$set:{age:19}})删除文档
1
db.集合名.remove(查询条件)
五、Mongoose
5.1 介绍
Mongoose 是一个对象文档模型库,官网 http://www.mongoosejs.net/
5.2 作用
方便使用代码操作 mongodb 数据库
5.3 使用流程
1 | //1. 安装 mongoose |
5.4 字段类型
文档结构可选的常用字段类型列表
5.5 字段值验证
Mongoose 有一些内建验证器,可以对字段值进行验证
5.5.1 必填项
1 | title: { |
5.5.2 默认值
1 | author: { |
5.5.3 枚举值
1 | gender: { |
5.5.4 唯一值
1 | username: { |
unique 需要 重建集合 才能有效果
5.6 CURD
数据库的基本操作包括四个,增加(create),删除(delete),修改(update),查(read)
5.6.1 增加
插入一条
1 | SongModel.create({ |
批量插入
1 | PhoneModel.insertMany([ |
5.6.2 删除
删除一条数据
1 | SongModel.deleteOne({_id:'5dd65f32be6401035cb5b1ed'}, function(err){ |
批量删除
1 | SongModel.deleteMany({author:'Jay'}, function(err){ |
5.6.3 更新
更新一条数据
1 | SongModel.updateOne({author: 'JJ Lin'}, {author: '林俊杰'}, function (err) { |
批量更新数据
1 | SongModel.updateMany({author: 'Leehom Wang'}, {author: '王力宏'}, function (err) { |
5.6.4 查询
查询一条数据
1 | SongModel.findOne({author: '王力宏'}, function(err, data){ |
批量查询数据
1 | //不加条件查询 |
5.7 条件控制
5.7.1 运算符
在 mongodb 不能 > < >= <= !== 等运算符,需要使用替代符号
- > 使用 $gt
- < 使用 $lt
- >= 使用 $gte
- <= 使用 $lte
- !== 使用 $ne
1 | db.students.find({id:{$gt:3}}); id号比3大的所有的记录 |
5.7.2 逻辑运算
$or 逻辑或的情况
1 | db.students.find({$or:[{age:18},{age:24}]}); |
$and 逻辑与的情况
1 | db.students.find({$and: [{age: {$lt:20}}, {age: {$gt: 15}}]}); |
5.7.3 正则匹配
条件中可以直接使用 JS 的正则语法,通过正则可以进行模糊查询
1 | db.students.find({name:/imissyou/}); |
5.8 个性化读取
5.8.1 字段筛选
1 | //0:不要的字段 |
5.8.2 数据排序
1 | //sort 排序 |
5.8.3 数据截取
1 | //skip 跳过 limit 限定 |
六、 图形化管理工具
我们可以使用图形化的管理工具来对 Mongodb 进行交互,这里演示两个图形化工具
Robo 3T 免费 https://github.com/Studio3T/robomongo/releases
Navicat 收费 https://www.navicat.com.cn/