在 Node.js 的 MongoDB 驱动程序中,Mongoose 是一个非常流行的对象文档映射 (Object Document Mapping, ODM) 库。它能让我们在 Node.js 中更方便地操作 MongoDB 数据库,同时也提供了一些强大的功能,比如数据验证、中间件等。在 Mongoose 中,Schema 是非常重要的一个概念,它定义了文档的结构和属性,也是对数据进行验证和存储的基础。本文将详细介绍 Mongoose 中的 Schema 类型及其应用场景。
Schema 类型
Mongoose 中的 Schema 类型有以下几种:
String
字符串类型,用于存储字符串,可以设置默认值、最大长度、最小长度等。
-- -------------------- ---- ------- ----- ------ - --- ----------------- ----- - ----- ------- --------- ----- ---------- -- ---------- --- -------- ----- ---- - ---
Number
数字类型,用于存储数字,可以设置默认值、最大值、最小值等。
-- -------------------- ---- ------- ----- ------ - --- ----------------- ---- - ----- ------- --------- ----- ---- --- ---- ---- -------- -- - ---
Date
日期类型,用于存储日期,可以设置默认值、最小日期、最大日期等。
-- -------------------- ---- ------- ----- ------ - --- ----------------- ------ - ----- ----- --------- ----- ---- ------------- ---- ------------- -------- -------- - ---
Boolean
布尔类型,用于存储 true/false 值,可以设置默认值。
const schema = new mongoose.Schema({ isVip: { type: Boolean, required: true, default: false } });
ObjectId
ObjectId 类型,用于存储 MongoDB 中的 ObjectId 值,可以设置默认值。
const schema = new mongoose.Schema({ author: { type: mongoose.Schema.Types.ObjectId, ref: 'User', required: true } });
Array
数组类型,用于存储数组,可以设置数组元素的类型、默认值等。
const schema = new mongoose.Schema({ tags: { type: [String], default: [] } });
Mixed
混合类型,用于存储任意类型的数据,不做数据验证。
const schema = new mongoose.Schema({ data: { type: mongoose.Schema.Types.Mixed, required: true } });
Buffer
缓冲区类型,用于存储二进制数据,比如图片、文件等。
const schema = new mongoose.Schema({ avatar: { type: Buffer, required: true } });
应用场景
Mongoose 中的 Schema 类型可以根据实际需求进行灵活选择和组合,以下是一些常见的应用场景:
数据验证
Schema 类型可以用于对数据进行验证,比如设置字符串的最大长度、数字的最小值等。在保存数据时,如果不符合验证规则,将会抛出错误。
-- -------------------- ---- ------- ----- ------ - --- ----------------- ----- - ----- ------- --------- ----- ---------- -- ---------- -- -- ---- - ----- ------- --------- ----- ---- --- ---- --- - ---
数据转换
Schema 类型可以用于将存储的数据进行转换,比如将字符串转换为数字、将日期字符串转换为 Date 对象等。
-- -------------------- ---- ------- ----- ------ - --- ----------------- ---- - ----- ------- --------- ----- ---- - -- -------------- ---- - -- ------------- -- ------ - ----- ----- --------- ----- ---- - -- --- -------- ---- - -- ------------------------- --- - ---
数据默认值
Schema 类型可以用于设置数据的默认值,当保存数据时,如果没有设置相应的属性,将会使用默认值。
-- -------------------- ---- ------- ----- ------ - --- ----------------- ----- - ----- ------- --------- ----- -------- ----- ---- -- ---- - ----- ------- --------- ----- -------- -- - ---
数据关联
Schema 类型可以用于定义数据之间的关系,比如将文章和作者进行关联。
-- -------------------- ---- ------- ----- ------------ - --- ----------------- ----- ------ --- ----- ------------- - --- ----------------- ------ ------- -------- ------- ------- - ----- ------------------------------- ---- -------- - ---
示例代码
-- -------------------- ---- ------- ----- -------- - -------------------- ----- ------------ - --- ----------------- ----- ------ --- ----- ------------- - --- ----------------- ------ - ----- ------- --------- ----- ---------- -- ---------- -- -- -------- - ----- ------- --------- ----- ---------- --- ---------- ----- -- ------- - ----- ------------------------------- ---- -------- -- ----- - ----- --------- -------- -- -- ---------- - ----- ----- -------- -------- - --- ----- ------ - ------------------------ -------------- ----- ------- - ------------------------- --------------- ------ -- -- - ----- -------------------------------------------- - ---------------- ----- ------------------- ---- --- ----- ------ - --- -------- ----- ----- ---- --- ----- -------------- ----- ------- - --- --------- ------ ------ ------- -------- ----- -- -- ----- ---------- ------- ----------- ----- --------- -------- --- ----- --------------- ----- -------- - ----- -------------- ------------------- ------- ------------------- -------- ---------------------- ----- ---------------------- -----
上面的示例代码演示了如何定义一个包含作者和文章的数据模型,并将它们关联起来。在保存文章时,我们使用了默认值和数组类型。在查询文章时,我们使用了 populate() 方法将作者信息一并查询出来。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67da6005a941bf7134250e4e