Mongodb与Mongoose关于schemaType的差异性
前言
mongodb是一个机遇分布式文件存储的开源数据库系统,使用的非关系型数据库的设计,其提供了一种高性能、高可用一集易扩展的数据库解决方案。其主要的特点有:
文档导向、无模式、索引支持、复制与高可用性、自动分片、丰富的查询语言、聚合工具等特性。
mongoose是一个开源的对象文档映射器(ODM)库,主要为node.js提供了一种高效的方式来管理mongodb数据库中的数据,其通过模型定义(Schema definition)、数据验证(Data validation)、查询构建(Query building)、中间件(Middleware)、插件体系(Plugins)等功能,极大的简化了使用mongodb的复杂性!schema作为mongodb与mongoose的抽象单元,提供了基础的抽象服务!
什么是schemaType?它有什么作用?
在
mongodb中最基本单元是文档(doc),而文档则由一个个的字段构成,mongodb中采用schema的抽象概念来对文档进行抽象化,而schemaType则是对schema中每一个字段的属性的描述,理解了mongodb与mongoose中关于schemaType的不同,可以更好的加深对schema definition模型的定义,更好地将业务逻辑抽象出来,更好的管理数据库
👉 可以简单的将schemaType理解为js中不同的数据类型定义
mongodb中的schemaType与mongoose中的schemaType都有哪些
👇 看一下两者的成员枚举对比:
🌟 可以发现,基本上除了Map类型之外,其他的都一样, 😕 那么,既然mongodb已经基本上拥有mongoose所提供的数据类型了,为什么还要多此一举,在mongoose中再次声明相关的同样的类型呢??
mongoose支持嵌套的schema、枚举、自定义验证器等特性,以及可以通过插件扩展的方式来接入更多的schemaType,这些特性都是mongoose的在mongodb原声驱动基础之上,提供的额外抽象和方便操作!! ⚠ 值得注意的是,在mongoose中的某些属性,比如:trim、uppercase、lowercase、match等等,这些都是mongoose提供的应用层面上的数据预处理和校验功能,而非mongodb数据库层面支持的特性!!!
🌚 既然说提供mongoose提供的这些类型是对mongodb额外进行的特性追加,那么,它是如何实现的呢??
mongoose中对于schema以及schemaType是如何使用的
直接上代码吧,比较容易理解一点
1 | const mongoose = require('mongoose') |
🌑 平时在直接使用mongodb的时候,可能就直接怼上去了,并没有太多专门针对schema做如此详细的定义,通过提前对schema中的schemaType的类型的定义声明,可以在更新这个schema数据的时候,提前做一个校验,减少错误信息的录入!!
与mongoose的schemaType类型相对应的属性都有哪些?

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