2016-06-14 13 views
1

私のMongooseスキーマでは、ドキュメント内のさまざまなプロパティから計算された仮想があります。Mongoose:cache a virtual

他のバーチャルはこのバーチャルを利用しているので、この高価な計算をキャッシュしたいと思います。

答えて

0

はい。

計算結果をデータベースに保存されていないプロパティとして設定するだけです。次に仮想関数が呼び出されたときに、代わりにそのプロパティを返します。

schema.virtual('x').get(function() { 
    if (this._x) return this._x; 
    var x = expensiveCalculation(); 
    this._x = x; 
    return x; 
}); 

計算がドキュメントの他のプロパティに依存する場合、これらのプロパティを変更すると、キャッシュを無効にする必要があることに注意してください。これを行うプロパティの設定を定義することができます。

var schema = new Schema({ 
    someProp: { type: Number, set: invalidateVirtualXCache } 
}); 

function invalidateVirtualXCache(val) { 
    this._x = void(0); 
    return val; 
} 
関連する問題