前言

mongodb是一个机遇分布式文件存储的开源数据库系统,使用的非关系型数据库的设计,其提供了一种高性能、高可用一集易扩展的数据库解决方案。其主要的特点有:文档导向无模式索引支持复制与高可用性自动分片丰富的查询语言聚合工具等特性。
mongoose是一个开源的对象文档映射器(ODM)库,主要为node.js提供了一种高效的方式来管理mongodb数据库中的数据,其通过模型定义(Schema definition)、数据验证(Data validation)、查询构建(Query building)、中间件(Middleware)、插件体系(Plugins)等功能,极大的简化了使用mongodb的复杂性!
schema作为mongodbmongoose的抽象单元,提供了基础的抽象服务!

什么是schemaType?它有什么作用?

mongodb中最基本单元是文档(doc),而文档则由一个个的字段构成,mongodb中采用schema的抽象概念来对文档进行抽象化,而schemaType则是对schema中每一个字段的属性的描述,理解了mongodbmongoose中关于schemaType的不同,可以更好的加深对schema definition模型的定义,更好地将业务逻辑抽象出来,更好的管理数据库
👉 可以简单的将schemaType理解为js中不同的数据类型定义

mongodb中的schemaType与mongoose中的schemaType都有哪些

👇 看一下两者的成员枚举对比:
mongodb与mongoose中的schemaType对比
🌟 可以发现,基本上除了Map类型之外,其他的都一样, 😕 那么,既然mongodb已经基本上拥有mongoose所提供的数据类型了,为什么还要多此一举,在mongoose中再次声明相关的同样的类型呢??

mongoose支持嵌套的schema、枚举、自定义验证器等特性,以及可以通过插件扩展的方式来接入更多的schemaType,这些特性都是mongoose的在mongodb原声驱动基础之上,提供的额外抽象和方便操作!! 值得注意的是,在mongoose中的某些属性,比如:trimuppercaselowercasematch等等,这些都是mongoose提供的应用层面上的数据预处理和校验功能,而非mongodb数据库层面支持的特性!!!

🌚 既然说提供mongoose提供的这些类型是对mongodb额外进行的特性追加,那么,它是如何实现的呢??

mongoose中对于schema以及schemaType是如何使用的

直接上代码吧,比较容易理解一点

1
2
3
4
5
6
7
8
9
10
11
12
const mongoose = require('mongoose')
const userSchema = mongoose.schema({
account: String,
phone: {
type: String,
unique: true
},
age: {
type: String,
min: 1
}
});

🌑 平时在直接使用mongodb的时候,可能就直接怼上去了,并没有太多专门针对schema做如此详细的定义,通过提前对schema中的schemaType的类型的定义声明,可以在更新这个schema数据的时候,提前做一个校验,减少错误信息的录入!!

与mongoose的schemaType类型相对应的属性都有哪些?

Mongoose中的SchemaType
🌟 这里我们整理了关于mongoose中不同的schemaType所能拥有的对应属性,通过这些额外属性的配置, 可实现mongoose所提供的前置校验以及自定义验证的目的!!