在我的Mongoose模式中,我有一个虚拟,它是根据我的文档中的各种属性计算的。
其他虚拟对象使用此虚拟,所以我希望缓存这个昂贵的计算。
答案 0 :(得分:0)
是
只需将计算结果设置为未保存到数据库的属性即可。下次调用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;
}