猫鼬:缓存虚拟

时间:2016-06-14 23:35:49

标签: javascript node.js mongodb mongoose

在我的Mongoose模式中,我有一个虚拟,它是根据我的文档中的各种属性计算的。

其他虚拟对象使用此虚拟,所以我希望缓存这个昂贵的计算。

1 个答案:

答案 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;
}