理解 Mongoose 中的虚拟属性

阅读时长 4 分钟读完

在使用 Mongoose 进行 MongoDB 操作时,有时需要在文档数据中加入一些计算得出的属性,这些属性不需要实体化保存在 MongoDB 中,但是需要在前端使用时加以计算。这时候,我们可以使用虚拟属性来达到这个目的。

什么是虚拟属性

虚拟属性是指在 Mongoose 模型中定义的、不存储在 MongoDB 中的属性。虚拟属性通常用于计算和获取文档数据的其他属性。

如何定义虚拟属性

在 Mongoose 模型中定义虚拟属性,只需要在 Schema 中使用 virtual 方法即可。例如,我们需要添加一个虚拟属性 fullName,那么可以这样定义 Schema:

上面的代码中,我们定义了一个 fullName 属性,并使用 get 方法定义了它的计算规则。在使用 fullName 属性时,Mongoose 会自动调用 get 方法进行计算。

同时,虚拟属性也可以使用 set 方法来设置属性值。例如,我们需要根据 fullName 的值设置 firstNamelastName

在使用 fullName 属性时,Mongoose 会自动调用 set 方法来设置 firstNamelastName

虚拟属性的应用场景

虚拟属性的应用场景非常广泛,例如:

  • 模型中需要计算得出的属性,比如总价格、折扣等
  • 模型中需要获取其他文档数据,比如一个用户文档需要获取该用户的所有订单数据
  • 前端需要使用的属性,比如用户的头像地址,可以通过计算得出

示例

以下是一个订单模型的示例,使用了虚拟属性来计算订单中的总价:

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

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

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

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

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

在上面的示例中,我们定义了一个 total 虚拟属性,它计算了订单的总价。在创建订单实例后,我们可以直接使用 order.total 进行获取。在获取 total 时,Mongoose 会自动调用 get 方法来计算总价。

总结

虚拟属性是 Mongoose 中非常实用的功能,它可以方便地实现模型中的部分属性的计算和获取,同时不需要占用 MongoDB 中的存储空间。在开发中,我们可以灵活地运用虚拟属性,为我们的项目带来更加高效和舒适的开发体验。

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

纠错
反馈