在我的 Mongoose 架构中,我有一个根据文档中的各种属性计算的虚拟。
其他虚拟使用这个虚拟,所以我希望缓存这个昂贵的计算。
最佳答案
是的。
只需将计算结果设置为不保存到数据库的属性即可。下次调用虚拟函数时,返回该属性。
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;
}
关于javascript - Mongoose :缓存虚拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37823847/