虽然 Mongoose 的模型定义通常对应 MongoDB 的文档结构,但有时需要通过模型的属性来间接获取其它属性的值,Mongoose 的虚拟属性(Virtuals)就可以实现这一需求。本文将详细介绍 Mongoose 如何使用虚拟属性。
什么是虚拟属性?
虚拟属性是在 Mongoose 模型中定义的一种计算属性,它不会保存到 MongoDB 中。虚拟属性可以用于包装单独存储在模型中的数据,并且可以在模型上设置和获取。通过虚拟属性,我们可以将多个属性的值全部包装到虚拟属性中,从而方便地访问这些属性。
虚拟属性可以是同步的也可以是异步的,如果需要从数据库中获取某些属性的值,建议使用异步方式获取,以便不占用 Node.js 的 I/O 线程,提高系统的性能。
如何定义虚拟属性
在 Mongoose 中定义虚拟属性非常简单,只需要在模型定义中使用 schema.virtual()
方法即可。schema.virtual()
方法接收两个参数:虚拟属性的名称和虚拟属性的实现。以下是一个定义虚拟属性的示例:
const userSchema = new mongoose.Schema({ firstName: String, lastName: String }); userSchema.virtual('fullName').get(function() { return `${this.firstName} ${this.lastName}`; });
在上面的示例中,我们定义了一个名为 fullName
的虚拟属性,它返回 firstName
和 lastName
的值拼接起来的字符串。
可以使用 get
和 set
方法分别实现虚拟属性的读取和设置。在上面的示例中,我们只使用了 get
方法,表示该虚拟属性只读不可写。如果需要向虚拟属性中写入数据,可以添加一个 set
方法。
userSchema.virtual('fullName').set(function(name) { const [ firstName, lastName ] = name.split(' '); this.firstName = firstName; this.lastName = lastName; });
在上述示例中,我们使用 set
方法向虚拟属性 fullName
中写入了名字数据,通过 split()
方法将名字拆成了两个单词。
如何访问虚拟属性
在 Mongoose 模型实例中访问虚拟属性非常简单,只需要像访问普通属性一样访问即可。以下是一个访问虚拟属性的示例:
const User = mongoose.model('User', userSchema); const user = new User({ firstName: 'John', lastName: 'Doe' }); console.log(user.fullName); // 'John Doe'
在上面的示例中,我们首先定义了一个 User
模型,然后创建了一个 user
实例。最后,我们使用 user.fullName
访问了虚拟属性。
总结
本文介绍了 Mongoose 模型中的虚拟属性的基本概念、使用方法以及访问方式。通过对虚拟属性的使用,我们可以方便地计算属性的值,更加灵活地获取模型中的数据。
以上就是关于 Mongoose 如何使用 Virtuals 的详细介绍,希望对读者有所帮助!
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6468f95f968c7c53b09158be