Mongoose 中 Schema 的使用详解

阅读时长 6 分钟读完

作为一个前端开发人员,很多时候我们需要与数据库打交道。而 Mongoose 是一个非常流行的 Node.js MongoDB 驱动,它的使用非常方便。在这篇文章中,我们主要讲解 Mongoose 中 Schema 的使用,帮助大家更好地理解如何创建一个数据模型。

什么是 Mongoose 中的 Schema?

Schema 是 Mongoose 中一个非常重要的概念,它代表了在 MongoDB 中的一个文档结构。在 Mongoose 中,Schema 定义了文档中每个字段的类型,每个字段可以有不同的默认值,验证规则等等。Schema 可以看做是数据模型的描述,它规定了数据的结构和格式。

Mongoose 中的 Schema 是一个 JavaScript 对象,它包含了一些字段的定义。下面是一个示例:

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

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

这里我们定义了一个名为 bookSchema 的 Schema,它包含了四个字段:title,author,price 和 publishDate,它们的类型分别是 String,String,Number 和 Date。通过这个示例,我们可以了解到什么是 Schema,以及如何定义一个 Schema。

Schema 中的字段定义

在上面的示例中,我们定义了 bookSchema 中的四个字段。除了类型以外,还有一些其他的选项可以对 Schema 中的字段进行细致的定义。下面是一个字段的定义示例:

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

字段名为 fieldName 是 Schema 中字段的名称。类型定义了这个字段的类型,可以是 String,Number,Date 等。required 表示这个字段是否必填。default 表示如果这个字段没有被设置,它的默认值是什么。validate 参数可以传入一个验证函数,用于验证这个字段的值是否合法。unique 表示这个字段的值是否唯一。sparse 表示这个字段是否可以为空。最后的 index 表示是否在 MongoDB 中为这个字段创建索引。

下面是一个我们用于定义 Schema 中字段的示例:

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

在这个示例中,我们定义了 bookSchema 对象中的每个字段,并且添加了一些选项。

Schema 中的虚拟属性

除了常规字段以外,Schema 中还定义了一种特殊的虚拟属性。虚拟属性不是真实存储在 MongoDB 中的数据,而是通过一个算法得出的值。它的主要功能是扩展文档对象的属性,以便于在应用中进行操作它们。虚拟属性可以包括计算、转换和格式化,可以方便地访问和修改一个文档对象的属性。下面是一个用于添加虚拟属性的示例:

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

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

在这个示例中,我们使用 virtual() 方法,以添加一个虚拟属性 fullName,它是由 title 和 author 字段组合而成。我们可以通过使用 get() 方法,获取虚拟属性的值,就像使用常规属性一样。

Schema 中的函数添加

在 Mongoose 中,Schema 中的字段定义可以通过添加函数进行扩展。这个函数可以在保存或查询时执行一些操作,比如哈希密码,在保存时获取时间戳等。下面是一个添加函数的示例:

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

在这个示例中,我们将一个 set() 函数添加到 author 字段的设置中。这个函数接收参数并将其转换为大写字母。

使用 Schema 创建数据模型

完成了 Schema 的定义,我们可以使用它来创建一个数据模型对象,这个对象是对应 MongoDB 中一个集合的。下面是一个示例:

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

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

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

在这个示例中,我们使用 mongoose.model() 方法,创建了一个名为 Book 的模型对象。这个模型对象与 bookSchema 相关联,它可以直接访问到 MongoDB 中的 Book 集合。现在我们可以使用 Book 对象创建或读取数据库中的文档数据了。

总结

在这篇文章中,我们谈论了 Mongoose 中的 Schema 的基本知识,以及如何定义一个 Schema、如何添加虚拟属性和扩展函数,以及如何使用 Schema 来创建一个数据模型对象。最后,希望这篇文章能够帮助到那些对 Mongoose 的 Schema 不是很熟悉的开发人员。

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

纠错
反馈