上手学习Mongoose,用来记录和梳理内容。
起步
名词
- Schema: 一种以文件形式存储的数据库模型骨架,相当于表
- Model: 由Schema生成的模型,具有抽象属性和行为的数据库操作对
- Entity: 由Model创建的实体
开工
1.连接数据库
|
|
2.回调
|
|
3.HelloWorld
1.定义Schema
|
|
2.将Schema创建为Model
|
|
3.创建Entity
|
|
4.CRUD操作
|
|
5.使用Model进行查询
|
|
Schema
纯洁的数据库原型,我理解为相当于定义一张表
基础
1.定义Schema
|
|
2.Type基本数据类型
|
|
3.Mixed
没有特定约束的混合类型,可以任意修改
一旦修改了原型,必须调用markModified()
|
|
4.Array
Array在JavaScript编程语言中并不是数组,而是集合,因此里面可以存入不同的值,以下代码等价:
|
|
扩展
1.实例方法
提供共用方法,方便Entity使用。例:
|
|
使用方法:
|
|
2.静态方法
提供Model层使用
|
|
3.索引
更加高效,专门讲解
4.虚拟属性
设置虚拟属性,方便操作,该属性不会被写入数据库
如:
Schema中如果定义了虚拟属性,那么该属性将不写入数据库,例如:
|
|
如果每次想使用全名就得这样
|
|
显然这是很麻烦的,我们可以定义虚拟属性:
|
|
那么就能用krouky.name.full来调用全名了,反之如果知道full,也可以反解first和last属性
|
|
CRUD
1.增
|
|
2.删
|
|
3.改
1.使用entity修改
|
|
2.使用Model操作,需要将主键_id进行删除
|
|
3.$set
|
|
4.findByIdAndUpdate
5.findByIdAndRemove
4.查
1.普通查询
|
|
2.链式查询
|
|
验证器
- required 非空验证
- min/max 范围验证(边值验证)
- enum/match 枚举验证/匹配验证
- validate 自定义验证规则
以下是综合案例:
|
|
####7.2 验证失败
如果验证失败,则会返回err信息,err是一个对象该对象属性如下
|
|
一旦验证失败,Model和Entity都将具有和err一样的errors属性
中间件
一种控制函数,类似插件,能控制流程中的init、validate、save、remove方法
1.Serial串行中间件
|
|
2.Parallel并行中间件
|
|
3.使用范畴
- 复杂的验证
- 删除有主外关联的doc
- 异步默认
- 某个特定动作触发异步任务,例如触发自定义事件和通知