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