簡體   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