Mongoose 中使用 Virtuals 的方式及常见错误

阅读时长 4 分钟读完

Mongoose 中使用 Virtuals 的方式及常见错误

在 Web 开发中,我们通常需要操作数据。而对于 Node.js 构建的 Web 应用来说,Mongoose 是一款非常优秀的 MongoDB 驱动包。其中,Virtuals 是 Mongoose 中用来处理虚拟属性的一个功能。本文将介绍通过 Mongoose 中的 Virtuals 实现虚拟属性的方式以及常见错误,包括相关的代码示例和指导意义。

什么是 Virtuals?

Mongoose 中的 Virtuals 可以理解为是一种类型的虚拟属性,它们是在数据库中不存储但是能提供辅助查询的属性。通常情况下,Mongoose 模型(Schema)实例的每个属性都需要在数据集中显式定义,但是 Virtuals 不需要。它们可以从其它属性生成,也可以手动创建。如果我们需要根据 Schema 的某些属性计算出一个新的属性,那么这便是使用 Virtuals 的良好场景。

Virtuals 的优势

虽然 Virtuals 在数据库中不存储,但是它们可以带来很多优势。

  1. 轻量级——Virtuals 只是 Mongoose 中的一个新增的选项,使用 Virtuals 不影响 MongoDB 中的数据库表结构。
  2. 能够缓存——和普通的 Schema property 一样,Virtuals 也可以缓存,使得查询速度更快。
  3. 能够作为附加属性——你可以将 Virtuals 作为普通属性一样使用,例如通过传递对象的方式来控制 Virtuals。

实现 Mongoose 中的 Virtuals

通过以下代码实现虚拟属性:

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

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

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

在上面的示例中,Schema 实例定义了 firstName 和 lastName。Virtuals 的定义需要使用 virtual() 方法。在虚拟属性的 get() 函数中,将 firstName 和 lastName 组合为 fullName。

通过及时更新所有属性来避免这些错误。如果你在定义模式时使用了默认值,请避免使用默认值。如果你想要支持更新原始属性(例如,firstName),请确保 Virtuals 同样支持。

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

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

在上述代码中,我们需要设置 Virtuals 属性 fullName 的设置器,以使其能够处理在数据集中直接更新 fullName 的情况。

总结

在本篇文章中,我们探讨了通过使用 Mongoose 中的 Virtuals 实现虚拟属性,并介绍了 Virtuals 相关的优点和实现方式。但是在使用中也会出现一些错误,因此我们还介绍了如何避免这些错误。我们希望读者能够从这篇文章中学习到更多关于 Mongoose 的知识,并能够有效地在应用程序中使用 Virtuals。

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

纠错
反馈