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