我开始在真实世界的应用程序中使用 Mongoose 中的虚拟 getter 方法,并且想知道使用它们是否会对性能产生影响,这将是很好的预先了解。
例如:
var User = new Schema({
name: {
first: String,
last: String
}
});
User.virtual('name.full').get(function () {
return this.name.first + ' ' + this.name.last;
});
基本上,我还不明白 getter 是如何生成到 Mongoose 使用的对象中的,以及这些值是在对象初始化时还是按需填充的。
__defineGetter__
可用于将属性映射到 Javascript 中的方法,但 Mongoose 似乎并未将其用于虚拟 getter(基于对代码的快速搜索)。
另一种方法是在初始化时填充每个虚拟路径,这意味着对于上面示例中的 100 个用户,连接名字和姓氏的方法被调用 100 次。
(我使用的是一个简化的例子,getter 可能要复杂得多)
检查原始对象本身(例如使用console.dir
)有点误导,因为 Mongoose 使用内部方法来处理将对象转换为“普通”对象或 JSON,默认情况下不包括 getter。
如果有人能阐明这是如何工作的,以及大量吸气剂是否会成为大规模的问题,我将不胜感激。