你需要了解的 Mongoose 虚拟属性

阅读时长 4 分钟读完

Mongoose 是一个操作 MongoDB 数据库的优秀工具。它可以让我们在 Node.js 应用程序中创建模型,并使用这些模型与 MongoDB 数据库进行通信。在这些模型中,有一种特殊的属性叫做“虚拟属性”,本文将介绍虚拟属性的概念、用法和示例代码。

什么是 Mongoose 虚拟属性

Mongoose 虚拟属性是一种不存储在 MongoDB 文档中的属性。相反,它们是通过模型的 getter 函数计算而来。这意味着虚拟属性的值只有在实例化模型时才有效,并且对模型的持久性没有影响。

虚拟属性有很多用途,例如将多个文档的属性计算并作为一个属性返回,或将一个文档的属性转化为另一个形式的属性。

Mongoose 虚拟属性的用法

要使用 Mongoose 虚拟属性,需要在模式中定义 getter 函数。例如,假设我们有一个用户模型及其对应的 MongoDB 文档包含一个名为“name”的属性,我们可以将其转化为“姓”和“名”两个虚拟属性。

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

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

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

在上面的代码中,我们使用 virtual 方法定义了两个虚拟属性“firstName”和“lastName”,并分别为它们定义了 getter 函数。在这个例子中,我们通过 split 方法将“name”属性分成“姓”和“名”,并返回作为虚拟属性。

现在,我们可以像访问普通属性一样访问虚拟属性:

Mongoose 虚拟属性的注意事项

在使用 Mongoose 虚拟属性时,需要注意以下几点:

  • 虚拟属性不能作为查询条件。因为它们不在文档中,无法被查询。
  • 虚拟属性不能被用于排序。因为它们不在文档中,无法被排序。
  • 虚拟属性不能被用于保存到数据库中。因为它们不在文档中,无法被保存。

Mongoose 虚拟属性示例代码

下面是一个具有虚拟属性的完整示例:

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

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

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

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

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

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

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

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

总结

Mongoose 虚拟属性是一个非常有用的工具,可以帮助我们在模型中计算和返回复杂的属性,而无需将它们存储在 MongoDB 文档中。然而,我们需要注意在某些情况下,虚拟属性可能无法应用于查询,排序和保存到数据库等操作。希望本文对您有所帮助!

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

纠错
反馈