Mongoose Schema(模式)是 Mongoose 的核心概念,用于定义 MongoDB 文档的结构、数据类型、验证规则和默认值。Schema 本身不是数据库中的集合,而是一个蓝图,用于创建 Model。
Schema 的基本定义
javascriptconst mongoose = require('mongoose'); const { Schema } = mongoose; const userSchema = new Schema({ name: { type: String, required: true, trim: true }, email: { type: String, required: true, unique: true, lowercase: true, trim: true }, age: { type: Number, min: 0, max: 120 }, createdAt: { type: Date, default: Date.now } });
Schema 的主要属性
- 字段类型:String、Number、Date、Buffer、Boolean、Mixed、ObjectId、Array
- 验证器:required、min、max、enum、match、validate
- 修饰符:lowercase、uppercase、trim、default
- 索引:unique、sparse、index
- 虚拟字段:不存储在数据库中的计算字段
- 实例方法:添加到文档实例的方法
- 静态方法:添加到模型类的方法
- 中间件:pre 和 post 钩子
Schema 与 Model 的关系
- Schema 是定义,Model 是构造函数
- 通过
mongoose.model('User', userSchema)创建 Model - Model 的实例是 Document,代表数据库中的实际文档
- 一个 Schema 可以创建多个 Model(不推荐)
Schema 的优势
- 数据一致性:强制文档结构一致
- 数据验证:在应用层验证数据
- 类型安全:提供类型检查和转换
- 中间件支持:可以在操作前后执行逻辑
- 可扩展性:可以添加方法和虚拟字段