Mongoose 中的 Model 和 Schema 标准写法

阅读时长 7 分钟读完

Mongoose 是一个前端领域广泛使用的 MongoDB ODM(对象文档映射器)库,旨在简化 MongoDB 数据存储的过程。在使用 Mongoose 的过程中,Model 和 Schema 是重要的知识点,本文将详细介绍它们的标准写法、使用方法以及相关实例代码。

Model

在 MongoDB 中,数据存储在集合(Collection)中,并且集合是没有 Schema 的。但是,在使用 Mongoose 时,我们需要为指定的集合定义一个 Model 类。Model 是应用程序与数据库之间的接口,它表示一个集合,并且具有许多方法可以用于查询和操作数据。

定义 Model

定义一个 Model 类需要使用 mongoose.model() 方法,该方法需要传递两个参数,第一个参数为集合的名称(会自动转化为小写且加上 s 后缀),第二个参数为该集合的 Schema。

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

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

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

上述代码中,定义了一个名为 User 的 Model 类,对应的集合为 users,该集合拥有三个字段:name(字符串类型)、age(数值类型)和 email(字符串类型)。Schema 会根据定义的字段来限制插入和更新数据的格式。

增加数据

使用 Model 的 create() 方法可以很方便地添加一条数据:

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

上述代码中,create() 方法将一个包含数据的对象作为参数,然后产生一个文档并将其保存到 MongoDB 中。回调函数中,如果有错误则会打印出来,否则会打印刚刚添加的数据。

查询数据

Mongoose 提供了一系列用于查询数据的方法,包括 find()、findOne()、findById() 等。以 find() 方法为例,可以如下地查询所有年龄大于 20 的用户:

更新数据

使用 Model 的 update() 方法可以更新集合中的数据:

上述代码中,使用 $set 操作符将 Peter 的电子邮件地址更新为 new_peter@example.com

删除数据

使用 Model 的 remove() 方法可以删除集合中的数据:

上述代码中,删除年龄小于 18 的用户。

Schema

Schema 是 Mongoose 中的关键概念之一。它定义了集合中每个文档的格式,包括文档的属性、默认值、验证规则等等。在定义 Schema 时,需要使用 mongoose.Schema() 将文档结构定义为一个 JavaScript 对象。

定义 Schema

定义一个最简单的 Schema 可以如下所示:

该 Schema 定义了一个名为 User 的集合,其中包括一个 name、一个 age 和一个 email 属性,它们的类型分别是字符串、数值和字符串。

默认值

在定义 Schema 时,还可以指定每个属性的默认值,如下例所示:

上述代码中,如果在添加数据的时候某个字段没有指定,则 Mongoose 将使用上述规则为该字段设置默认值。

验证规则

在定义 Schema 时,还可以定义验证规则以确保文档中的数据合法。常见的验证规则包括 required、minlength、maxlength、min、max、match 等。以下是一个示例:

上述代码中,定义了一个 users 集合,其中 name 属性必填、age 属性取值范围为 18 到 65 之间、email 属性必须符合正则表达式 /^[\w-]+@([\w-]+.)+[\w-]{2,4}$/。

虚拟属性

虚拟属性(Virtuals)是 Mongoose 中的一个高级特性,它们允许您定义实体的属性,这些属性可以计算得出,而不必专门存储在您的 MongoDB 数据库中。示例代码如下:

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

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

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

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

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

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

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

上述代码中定义了一个 User 的 Schema,并在其中定义了一个虚拟属性 fullName。在使用 get 和 set 方法时,需要使用 this 关键字来获取或设置当前文档的属性。

总结

本文详细介绍了在 Mongoose 中定义 Model 和 Schema 的标准方式,同时介绍了其相关的代码示例。希望本文对您更深入理解 Mongoose 的使用和技术实现有所帮助。

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

纠错
反馈