[英]Mongoose: cache a virtual
在我的Mongoose模式中,我有一个虚拟,它是根据我的文档中的各种属性计算出来的。
其他虚拟使用此虚拟,所以我希望缓存这个昂贵的计算。
是。
只需将计算结果设置为未保存到数据库的属性即可。 下次调用virtual函数时,返回该属性。
schema.virtual('x').get(function() {
if (this._x) return this._x;
var x = expensiveCalculation();
this._x = x;
return x;
});
请注意,如果计算取决于文档的其他属性,如果更改这些属性,则必须使缓存无效。 您可以为那些为您执行此操作的属性定义setter。
var schema = new Schema({
someProp: { type: Number, set: invalidateVirtualXCache }
});
function invalidateVirtualXCache(val) {
this._x = void(0);
return val;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.