在 Mongoose 中使用 Virtuals

阅读时长 4 分钟读完

在 Mongoose 中使用 Virtuals

Mongoose 是 Node.js 中应用广泛的 Object Document Mapping(ODM)库,它为我们提供了映射 MongoDB 数据库的能力。除了基本的 CRUD 操作外,Mongoose 还提供了一些高级功能,例如 Virtuals,它允许我们在 Schema 中定义虚拟字段,这些字段不会存在于数据库中,但可以通过 Mongoose 查询和操作,它们的值是通过指定的函数计算得到的。

Virtuals 的用途非常广泛,比如处理一些计算得到的数据,展示数据之前的转换,拼接多个字段等。在本文中,我们将一步步学习在 Mongoose 中如何使用 Virtuals。

Virtuals 的定义

在 Mongoose 中,Virtuals 的定义需要在 Schema 上定义,可以使用 Schema.Types.Virtual 方法。以下是一个简单的示例,它定义了一个名为 fullName 的 Virtual:

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

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

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

在上面的代码中,我们定义了一个 User Schema,并在其上定义了一个名为 fullName 的 Virtual,这个 Virtual 的值是通过 firstName 和 lastName 属性的字符串拼接得到的。

Virtuals 的使用

有两种方式可以使用 Virtuals:通过查询数据和在 Model 实例上直接访问。

查询数据

在查询数据时,Virtuals 默认是不会被包含在查询结果中的,需要通过 set() 或者 get() 方法来显式地指定。

上面的代码中,我们使用 select() 方法指定查询结果只包括 fullName 属性。

在 Model 实例上直接访问

在 Model 实例上访问 Virtuals 的方式非常简单,就像访问普通的 Model 属性一样。

Virtuals 计算的属性值设置

在上面的 Virtuals 示例中,我们使用了 get() 方法来定义 Virtual 值的计算方式。Mongoose 还支持使用 set() 方法来定义 Virtual 的值的计算方式。set() 方法定义了 Virtual 的值如何存储到 Model 属性中。

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

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

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

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

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

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

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

在上面的代码中,我们定义了一个 set 方法,它以 fullName 为参数,将 fullName 按照空格分隔成 firstName 和 lastName,并将它们分别设置到 Model 上。我们可以像操作正常的 Model 属性一样使用 user.fullName = 'Jane Doe' 来设置 Virtual 值。

小结

Mongoose 的 Virtuals 功能是一个非常强大的功能,它允许我们定义虚拟属性来处理不存储在数据库中的数据。通过本文,您已经学会了如何在 Mongoose 中定义和使用 Virtuals。在实际的开发中,我们经常会使用 Virtuals 来处理一些特殊的场景,例如规范化数据,计算计算过程中的值,简化数据处理等。希望这篇文章能对你有所帮助!

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

纠错
反馈