第1章:数据库
1.1 数据库是什么
数据库(DataBase)是按照数据结构来组织、存储和管理数据的仓库。
1.2 为什么要使用数据库
我们的程序都是在内存中运行的,一旦程序运行结束或者计算机断电,程序运行中的数据都会丢失。所以我们就需要将一些程序运行的数据持久化到硬盘之中,以确保数据的安全性。而数据库就是数据持久化的最佳选择。说白了,数据库就是存储数据的仓库。
1.3 数据库的分类
1.3.1 关系型数据库(RDBS)
代表有:MySQL、Oracle、DB2、SQL Server...
特点:关系紧密,都是表
- 优点:
- 易于维护:都是使用表结构,格式一致;
- 使用方便:使用统一的SQL查询语言;
- 高级查询:可进行多表之间非常复杂的查询;
- 支持事务:可将复杂流程配成事务;
- 缺点:
- 读写性能比较差,尤其是海量数据的高效率读写;
- 有固定的表结构,字段不可随意更改,灵活度稍欠;
- 高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈。
1.3.2 非关系型数据库
代表有:MongoDB、Redis...
- 优点:
- 格式灵活:存储数据的格式可以是key,value形式。
- 速度快:可以内存作为载体,而关系型数据库只能使用硬盘;
- 易用:数据库部署简单。
- 缺点:
- 不能直接编写SQL,学习和使用成本较高;
- 不支持事务;
- 复杂查询时语句过于繁琐。
第2章:MongoDB
2.1 MongoDB简介
MongoDB是为快速开发互联网Web应用而设计的数据库系统。
MongoDB的数据模型是面向文档的,所谓文档是一种类似于JSON的结构,简单理解MongoDB这个数据库中存的是各种各样的JSON
第3章:MongoDB的使用
3.1 简介
3.1.1 数据库(database)
数据库是一个仓库,在仓库中可以存放集合。
3.1.2 集合(collection)
集合类似于JS中的数组,在集合中可以存放文档。
例如:student集合 teacher集合
3.1.3 文档(document)
文档数据库中的最小单位,我们存储和操作的内容都是文档。
类似于JS中的对象,MongoDB中每一条数据都是一个文档。
3.2 使用
3.2.1 基本命令
-
显示所有的数据库
show dbs
-
切换到指定的数据库
use 数据库名
-
显示当前所在的数据库
db
-
删除当前数据库
db.dropDatabase()
-
显示当前数据库中的所有集合
show collections
-
删除当前集合
db.collection.drop()
3.2.2 操作命令
在MongoDB,数据库和集合都不需要创建,当我们向集合或数据库中第一次插入文档时,集合和数据库会自动创建。
-
向集合中插入文档
db.<collection>.insert(doc) 如:db.stus.insert({name:"sunwukong",age:18})
-
查询集合中的文档
db.<collection>.find() 如:db.stus.find()
3.2.3 数据库的CRUD
-
向集合中插入文档(create)
// 向集合中插入一个或多个文档 db.collection.insert()
-
查询集合中的文档(read)
// 查询集合中所有符合条件的文档,总是会返回一个数组个文档对象 db.collection.find(查询条件)
- 操作符: >, >=, <, <=, != 对应: “ g t " , " gt", " gt","gte", “ l t " , " lt", " lt","lte”, “$ne”
- 操作符:“ o r " , " or", " or","in”,“$nin”
- 正则表达式
- “$where”
-
修改集合中的文档(update)
// 修改或替换一个或多个文档 db.collection.update(查询条件,新的文档,配置对象)
-
删除集合中的文档(delete)
// 删除所有(或第一个)符合条件的文档 db.collection.remove(查询条件)
第4章:Mongoose的使用
4.1 简介
Mongoose是一个对象文档模型(ODM)库,它对Node原生的MongoDB模块进行了进一步的优化封装,并提供了更多的功能。
4.2 优势
- 可以为文档创建一个模式结构(Schema)
- 可以对模型中的对象/文档进行验证
- 数据可以通过类型转换转换为对象模型
- 可以使用中间件来应用业务逻辑挂钩
- 比Node原生的MongoDB驱动更容易
4.3核心对象
4.3.1 Schema
模式对象,通过Schema可以对集合进行约束
4.3.2 Model
模型对象,相当于数据库中的集合,通过该对象可以对集合进行操作
4.3.3 Document
文档对象,它和数据库中的文档相对应,通过它可以读取文档的信息,也可以对文档进行各种操作
4.4 使用
4.4.1 连接数据库
-
下载安装Mongoose
npm i mongoose --save
-
引入Mongoose
var mongoose = require("mongoose");
-
连接MongoDB数据库
mongoose.connect("mongodb://ip地址:端口号/数据库名");
4.4.2 创建核心对象
-
创建Schema对象,内部传入约束对象
var Schema = mongoose.Schema; var xxxSchema = new Schema({ 字段:类型, 字段:类型, 字段:类型, 字段:类型 });
-
创建Model对象
var XxxModel = mongoose.model("集合名",xxxSchema);
注意:生成的集合会自动添加s,并转为小写。
解决方式:
- 严格规范名称
- 在new Schema时候传入第二个参数{collection: ‘集合名称’}
-
创建Document对象
var xxx = new XxxModel({ 属性:值, 属性:值, 属性:值 });
4.4.3 使用方式
create()
- 创建一个或多个文档对象并添加到数据库中
find()
- 查找所有符合条件的文档,返回的是数组
update()
- 修改(替换)一个或多个
remove()
- 删除一个或多个文档
4.5 mongoose的模块化
-
tools/db.js
// 该模块专门用来连接MongoDB数据库 var mongoose = require("mongoose"); mongoose.connect("mongodb://127.0.0.1/mongoose_test"); mongoose.connection.once("open",function () { console.log("MongoDB数据库已经成功连接"); });
-
models/student.js
//来定义Student的模型 var mongoose = require("mongoose"); var Schema = mongoose.Schema; //创建约束对象 var stuSchema = new Schema({ name:String, age:Number, gender:{ type:String, default:"女" }, address:String }); //创建模型 var Student = mongoose.model("student",stuSchema); //将Student暴露出去 module.exports = Student;
-
test.js
//引入db.js require("./tools/db"); //引入student.js var Student = require("./models/student"); Student.create({ name:"二郎神", age:"48", gender:"男", address:"小圣庙" },function (err) { if(!err){ console.log("插入成功"); } });