在 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() 方法将作者信息一并查询出来。
Source: FunTeaLearn,Please indicate the source for reprints https://funteas.com/post/67da6005a941bf7134250e4e