在 Mongoose 中,虚拟属性(Virtuals)是一种不会被存储到 MongoDB 数据库中的模型属性。它们是通过对其他属性或文档内容的计算或转换得到的。虚拟属性通常用于将相关的数据展示在一个单一的字段中,或者在某些情况下使数据的处理变得更加方便。
定义虚拟属性
在 Mongoose 中,定义一个虚拟属性很简单,只需要调用模型(Schema)的 virtual()
方法,并传入一个属性名和一个 get
方法。 get
方法被用于计算虚拟属性的值。
const UserSchema = new mongoose.Schema({ firstName: String, lastName: String }); UserSchema.virtual('fullName').get(function() { return `${this.firstName} ${this.lastName}`; });
在上面的例子中,虚拟属性 fullName
会返回根据 firstName
和 lastName
计算的值。
计算虚拟属性
当试图访问虚拟属性时,Mongoose 会调用 get
方法,并将当前文档作为其上下文对象(this
)。下面是一些 get
方法可以使用的常见技术:
计算属性
对于计算属性,可以在 get
方法中使用 JavaScript 代码直接计算属性的值。
-- -------------------- ---- ------- ----- ---------- - --- ----------------- ------- ------- ------- ------ --- ---------------------------------------- - ----- ------------ - ----------- - ---- ------ ----------- - ------------- - -------------- ---
在上面的例子中,虚拟属性 bmi
会返回根据身高和体重计算的 Body Mass Index 值。
关联查询
在某些情况下,我们可能需要查询关联的文档,并在虚拟属性中返回它的某些属性。这时,可以在 get
方法中使用 Mongoose 的 populate()
方法加载相关的文档并返回所需的属性。
-- -------------------- ---- ------- ----- ---------- - --- ----------------- ------ ------- ------- - ----- ------------------------------- ---- -------- - --- ----- ------------ - --- ----------------- ----- ------- -------- ------ --- --------------------------------------------- ---------- - ----- --------------------------------------- ------ -------------------- ---
在上面的例子中,虚拟属性 authorCountry
会返回该书籍的作者所在的国家。
总结
在本文中,我们介绍了 Mongoose 中如何定义虚拟属性,并提供了一些常见的虚拟属性计算示例。虚拟属性可以帮助我们更好地组织数据,并使数据的处理更加方便。
下面是定义虚拟属性的基本步骤:
- 在模型(Schema)上调用
virtual()
方法,传递属性名称和get
函数; - 在
get
方法中计算虚拟属性的值。
如果您需要进一步了解 Mongoose 的虚拟属性,请查阅相关文档。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64f3e29cf6b2d6eab3d1d520