繁体   English   中英

猫鼬:缓存虚拟

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM