Mongoose 中的 Virtuals 详解及其应用

在 Mongoose 中,Virtuals 是一种虚拟属性,它们不会存储在数据库中,但可以在模型中定义和使用。Virtuals 可以用于计算属性、格式化数据、组合数据等。

本文将深入探讨 Mongoose 中的 Virtuals,包括如何定义、如何使用、如何扩展 Virtuals 的功能等。

定义 Virtuals

在 Mongoose 中,Virtuals 可以通过在 Schema 中定义 getter 和 setter 方法来创建。例如,我们可以在一个 User 模型中定义一个 Virtuals 属性 fullName,该属性由 firstName 和 lastName 组成:

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

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

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

上面的代码中,我们定义了一个 fullName Virtual,它是由 firstName 和 lastName 两个属性组合而成的。getter 方法将返回这个组合后的值,setter 方法将根据传入的值分离出 firstName 和 lastName 并赋值给相应的属性。

使用 Virtuals

Virtuals 可以像普通属性一样使用,但需要注意的是,它们不会被存储在数据库中。例如,我们可以创建一个 User 对象并设置 firstName 和 lastName 属性,然后使用 fullName Virtual 来获取完整的名字:

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

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

在上面的代码中,我们创建了一个 User 对象,并设置了 firstName 和 lastName 属性。然后我们使用 fullName Virtual 来获取完整的名字,这个 Virtual 会自动计算并返回 firstName 和 lastName 的组合值。

扩展 Virtuals 的功能

除了基本的计算属性之外,Virtuals 还可以用于扩展模型的功能。例如,我们可以在一个 User 模型中定义一个 Virtuals 属性 friends,该属性会返回和当前用户有共同好友的其他用户:

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

上面的代码中,我们定义了一个 friends Virtual,它会返回和当前用户有共同好友的其他用户。为了实现这个功能,我们需要设置 ref、localField 和 foreignField 三个参数:

  • ref:关联的模型名称。
  • localField:本地模型的字段名称,用于关联。
  • foreignField:关联模型的字段名称,用于关联。

在上面的代码中,我们将 friends Virtual 关联到了 User 模型的 _id 字段,并将其作为 foreignField 和 friends 模型的 friends 字段进行关联。这样,friends Virtual 就可以返回和当前用户有共同好友的其他用户。

总结

Virtuals 是 Mongoose 中的一种虚拟属性,它们不会存储在数据库中,但可以在模型中定义和使用。Virtuals 可以用于计算属性、格式化数据、组合数据等,还可以扩展模型的功能。在使用 Virtuals 时,需要注意 Virtuals 不会被存储在数据库中,但可以像普通属性一样使用。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6603c658d10417a222040c6e