Mongoose 中的 Schema 类型详解及其应用场景

阅读时长 8 分钟读完

在 Node.js 的 MongoDB 驱动程序中,Mongoose 是一个非常流行的对象文档映射 (Object Document Mapping, ODM) 库。它能让我们在 Node.js 中更方便地操作 MongoDB 数据库,同时也提供了一些强大的功能,比如数据验证、中间件等。在 Mongoose 中,Schema 是非常重要的一个概念,它定义了文档的结构和属性,也是对数据进行验证和存储的基础。本文将详细介绍 Mongoose 中的 Schema 类型及其应用场景。

Schema 类型

Mongoose 中的 Schema 类型有以下几种:

String

字符串类型,用于存储字符串,可以设置默认值、最大长度、最小长度等。

-- -------------------- ---- -------
----- ------ - --- -----------------
  ----- -
    ----- -------
    --------- -----
    ---------- --
    ---------- ---
    -------- ----- ----
  -
---

Number

数字类型,用于存储数字,可以设置默认值、最大值、最小值等。

-- -------------------- ---- -------
----- ------ - --- -----------------
  ---- -
    ----- -------
    --------- -----
    ---- ---
    ---- ----
    -------- --
  -
---

Date

日期类型,用于存储日期,可以设置默认值、最小日期、最大日期等。

-- -------------------- ---- -------
----- ------ - --- -----------------
  ------ -
    ----- -----
    --------- -----
    ---- -------------
    ---- -------------
    -------- --------
  -
---

Boolean

布尔类型,用于存储 true/false 值,可以设置默认值。

ObjectId

ObjectId 类型,用于存储 MongoDB 中的 ObjectId 值,可以设置默认值。

Array

数组类型,用于存储数组,可以设置数组元素的类型、默认值等。

Mixed

混合类型,用于存储任意类型的数据,不做数据验证。

Buffer

缓冲区类型,用于存储二进制数据,比如图片、文件等。

应用场景

Mongoose 中的 Schema 类型可以根据实际需求进行灵活选择和组合,以下是一些常见的应用场景:

数据验证

Schema 类型可以用于对数据进行验证,比如设置字符串的最大长度、数字的最小值等。在保存数据时,如果不符合验证规则,将会抛出错误。

-- -------------------- ---- -------
----- ------ - --- -----------------
  ----- -
    ----- -------
    --------- -----
    ---------- --
    ---------- --
  --
  ---- -
    ----- -------
    --------- -----
    ---- ---
    ---- ---
  -
---

数据转换

Schema 类型可以用于将存储的数据进行转换,比如将字符串转换为数字、将日期字符串转换为 Date 对象等。

-- -------------------- ---- -------
----- ------ - --- -----------------
  ---- -
    ----- -------
    --------- -----
    ---- - -- --------------
    ---- - -- -------------
  --
  ------ -
    ----- -----
    --------- -----
    ---- - -- --- --------
    ---- - -- ------------------------- ---
  -
---

数据默认值

Schema 类型可以用于设置数据的默认值,当保存数据时,如果没有设置相应的属性,将会使用默认值。

-- -------------------- ---- -------
----- ------ - --- -----------------
  ----- -
    ----- -------
    --------- -----
    -------- ----- ----
  --
  ---- -
    ----- -------
    --------- -----
    -------- --
  -
---

数据关联

Schema 类型可以用于定义数据之间的关系,比如将文章和作者进行关联。

-- -------------------- ---- -------
----- ------------ - --- -----------------
  ----- ------
---

----- ------------- - --- -----------------
  ------ -------
  -------- -------
  ------- -
    ----- -------------------------------
    ---- --------
  -
---

示例代码

-- -------------------- ---- -------
----- -------- - --------------------

----- ------------ - --- -----------------
  ----- ------
---

----- ------------- - --- -----------------
  ------ -
    ----- -------
    --------- -----
    ---------- --
    ---------- --
  --
  -------- -
    ----- -------
    --------- -----
    ---------- ---
    ---------- -----
  --
  ------- -
    ----- -------------------------------
    ---- --------
  --
  ----- -
    ----- ---------
    -------- --
  --
  ---------- -
    ----- -----
    -------- --------
  -
---

----- ------ - ------------------------ --------------
----- ------- - ------------------------- ---------------

------ -- -- -
  ----- -------------------------------------------- -
    ---------------- -----
    ------------------- ----
  ---

  ----- ------ - --- -------- ----- ----- ---- ---
  ----- --------------

  ----- ------- - --- ---------
    ------ ------ -------
    -------- ----- -- -- ----- ----------
    ------- -----------
    ----- --------- --------
  ---
  ----- ---------------

  ----- -------- - ----- --------------
    ------------------- -------
    -------------------
    --------
  ----------------------

  ----- ----------------------
-----

上面的示例代码演示了如何定义一个包含作者和文章的数据模型,并将它们关联起来。在保存文章时,我们使用了默认值和数组类型。在查询文章时,我们使用了 populate() 方法将作者信息一并查询出来。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67da6005a941bf7134250e4e

纠错
反馈