在 Mongoose 中,虚拟属性(Virtual)是一种不会被存储在数据库中的属性,它们是通过对其他属性进行计算得到的。虚拟属性在某些场景下非常有用,例如计算属性、格式化数据等等。本文将介绍 Mongoose 中虚拟属性的基本用法及应用技巧。
基本用法
在 Mongoose 中,通过 Schema
的 virtual
方法定义虚拟属性。以下是一个简单的示例:
-- -------------------- ---- ------- ----- ---------- - --- ----------------- ---------- ------- --------- ------ --- --------------------------------------------- - ------ -------------- - - - - -------------- --- ----- ---- - ---------------------- ------------ ----- ---- - --- ------ ---------- ------- --------- ----- --- --------------------------- -- ----- ----
在上面的示例中,我们定义了一个 User
模型,其中包含 firstName
和 lastName
两个属性。我们通过 virtual
方法定义了一个名为 fullName
的虚拟属性,它将 firstName
和 lastName
属性拼接成一个完整的名字。当我们访问 user.fullName
时,会调用 get
方法计算虚拟属性的值并返回。
虚拟属性还可以通过 set
方法设置值。以下是一个示例:
-- -------------------- ---- ------- -------------------------------------------------- - ----- ----- - ------------- --- -------------- - --------- ------------- - --------- --- ------------- - ----- ----- ---------------------------- -- ------ --------------------------- -- -----
在上面的示例中,我们重新定义了 fullName
虚拟属性的 set
方法,它会将传入的值拆分成 firstName
和 lastName
,并将它们分别赋值给对应的属性。当我们设置 user.fullName
值时,会调用 set
方法设置虚拟属性的值。
应用技巧
计算属性
虚拟属性最常见的用途之一是计算属性。例如,在一个电商网站中,我们可能需要计算每个订单的总价。我们可以通过定义一个 totalPrice
虚拟属性来实现:
-- -------------------- ---- ------- ----- ----------- - --- ----------------- ------ -- ----- ------- ------ ------- --------- ------ -- --- ------------------------------------------------ - ------ ------------------------- ----- -- ----- - ---------- - -------------- --- --- ----- ----- - ----------------------- ------------- ----- ----- - --- ------- ------ -- ----- -------- --- ------ --- --------- - -- - ----- -------- --- ------ --- --------- - -- --- ------------------------------ -- --
在上面的示例中,我们定义了一个 Order
模型,其中包含一个 items
数组属性,每个元素包含产品名称、价格和数量。我们通过 virtual
方法定义了一个名为 totalPrice
的虚拟属性,它通过遍历 items
数组计算每个产品的总价,并将它们累加得到订单的总价。
格式化数据
虚拟属性还可以用于格式化数据,例如将日期格式化为特定的字符串格式。以下是一个示例:
-- -------------------- ---- ------- ----- ---------- - --- ----------------- ------ ------- -------- ------- ---------- ---- --- ------------------------------------------------------- - ------ ----------------------------------------- ----------- --- ----- ---- - ---------------------- ------------ ----- ---- - --- ------ ------ ------- -------- -------- ----- -- - ---- ------- ---------- --- ------ --- ------------------------------------- -- ----------- ---------
在上面的示例中,我们定义了一个 Post
模型,其中包含 title
、content
和 createdAt
三个属性。我们通过 virtual
方法定义了一个名为 formattedCreatedAt
的虚拟属性,它将 createdAt
属性格式化为 YYYY-MM-DD HH:mm:ss
的字符串格式。当我们访问 post.formattedCreatedAt
时,会调用 get
方法计算虚拟属性的值并返回。
总结
虚拟属性是 Mongoose 中非常有用的一个特性,它可以帮助我们计算属性、格式化数据等等。在使用虚拟属性时,需要注意以下几点:
- 虚拟属性不会被存储在数据库中,它们是通过其他属性计算得到的。
- 虚拟属性可以通过
get
和set
方法获取和设置值。 - 虚拟属性可以用于计算属性、格式化数据等等。
希望本文对你学习和使用 Mongoose 中的虚拟属性有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/650e80a395b1f8cacd7a0d30