数据库
1、数据库
1)为何使用数据库
① 动态网站中的数据都是存储在数据库中的
② 数据库可以用来持久存储客户端通过表单收集的用户信息
③ 数据库软件本身可以对数据进行高效管理
2)什么是数据库
① 数据库即存储数据的仓库,可以将数据进行有序的分类存储。它是一个软件,可以通过API去操作它。
② 常见数据库软件:mysql、mongoDB、oracle
3)MongoDB和MongoDB可视化软件下载
2、数据库相关概念
在一个数据库软件中可以包含多个数据仓库,在每个数据仓库中可以包含多个数据集合,每个数据集合中可以包含多条文档(具体的数据)
术语 | 解释说明 |
---|---|
database | 数据库,MongoDB数据库软件中可以建立多个数据库 |
collection | 集合,一组数据的集合,可理解为js中的数组 |
document | 文档,一条具体的数据,可理解为js中的对象 |
field | 字段,文档中的属性名称,可理解为js中的对象属性 |
3、MongoDB第三方模块
使用Node.js操作MongoDB数据库需要依赖Node.js第三方包mongoose。
1)在powershell中下载mongoose第三方包
2)启动MongoDB
① 在命令行工具中运行 ' net start mongoDB ' 即可启动MongoDB,否则 MongoDB无法进行连接
*问题:net start mongodb 发生系统错误 5,则以管理员身份运行powershell 再执行开启命令
② 数据库连接
mongoose中的connect 方法连接
then 和 catch 方法进行对结果的接收反馈
运行后在按照提示 connect 方法中粘贴上 { useNewUrlParser: true, useUnifiedTopology: true }
再次执行js文件即可连接
3)创建数据库
在MongoDB中不需要显式创建数据库,如果正在使用的数据库不存在,MongoDB会自动创建。
图解:
下载mongoose
启动mongodb
编写代码
运行代码、发现错误提示
按提示添加对应代码
再次运行代码成功
4)创建集合
创建集合分为两步,一是对对集合设定规则,二是创建集合。
① 创建mongoose.Schema构造函数的实例即可创建集合。创建规则 Schema 实际上 就是创建 Schema 的实例对象
② model 方法第一个参数为集合名称,mongoose规定集合名称首字母要大写。 model 方法会返回当前集合的构造函数,代表当前集合
*步骤:
① 使用 new 操作符创造 mongoose下的 Schema 实例对象
② 使用 mongoose 的 model 方法,再使用创建的集合规则
③ 插入数据,即创建问文档
5)创建文档
创建文档实际上就是向集合中插入数据。
-
法一:分为两步:
① 创建集合实例。 ② 调用实例对象下的save方法将数据保存到数据库中。
-
法二:
① 使用集合构造函数的 create 方法 ② 参数一是向集合插入文档的对象,参数二是回调函数(有 err 和 doc 两个参数) *关于数据库的操作都是异步操作 *MongoDB中的API也支持promise方式 *即,create方法也返回 promise 对象,也可使用 then 和 catch方法,支持异步函数写法
图解:
6)现存数据插入数据库
使用 mongoimport (import:导入)工具,命令:mongoimport -d 数据库名称(往哪个数据库中导入数据) -c 集合名称(导入到数据库的哪个集合中) -file 要导入的数据文件
① 复制mongoimport路径,再对mongoimport进行环境配置
② 重启powershell,输入 ' mongoimport -d 数据库名称(往哪个数据库中导入 数据) -c 集合名称(导入到数据库的哪个集合中) --file 要导入的数据文件 ' 命令执行
③ 回到可视化工具查看可看到数据已被导入成功
图解:
7)查询文档
1.全部与单个查找
在集合的构造函数下有个 find 方法,默认情况下查找的是集合中的所有文档。
find方法返回的是一个promise对象,所以我们可以在它后面使用链式调用 then 方法来获取查询结果。而此时 then 方法返回的 result 是一个数组,数组中包含的多个对象就是 find 查找的结果,find 返回的是文档的集合(find方法返回的是一个数组)。
-
使用:
① 编写代码,查询文档 ② 可查询用户ID为多少的字段 ③ findOne 方法返回的是一个对象,默认返回第一个对象
图解:
2.按范围查找
- 语法:
① 匹配大于小于
集合名称.find({ 属性: {$gt: 大于几 $lt: 小于几}}).then(result => console.log(result));
② 匹配包含
集合名称.find({ 属性: {$in: ['包含的内容']}}).then(result => console.log(result));
③ 选择要查询字段
集合名称.find().select(' 属性1 属性2 ').then(result => console.log(result));
*select中用 空格 隔开要查询字段,- 表示不查询
④ 根据字段排列
升序:使用 sort 方法
降序:在 sort 方法中使用 - 符号
⑤ 跳过与限制
skip 跳过
limit 限制
图解:
8)删除文档
① 删除单个文档 集合名称.findOneAndDelete({文档属性: '属性值'}).then(result => console.log(result));
② 删除多个文档 集合名称.deleteMany({}).then(result => console.log(result));
*deleteMany为空,代表删除集合的所有数据
图解:
9)更新文档
①更新单个文档 集合名称.updateOne({查询条件}, {要修改的值}).then(result => console.log(result));
②更新多个文档 集合名称.updateMany({查询条件}, {要修改的值}).then(result => console.log(result));