0
我在節點/快遞/貓鼬中有一個場景,我有積累積分的用戶,當積分超過某個閾值時,他們「升級」(以基於積分的級別思考遊戲)。來自另一個字段的setter的Mongoose更新依賴字段?
我已經在點字段上創建了一個自定義setter,用於檢查值是否已更改,如果是,則嘗試更新級別字段。級別在另一個集合中定義,但在與用戶文檔(因此查詢中的.lean())關聯時保存爲簡單的JSON對象。我以這種方式對虛擬領域或人口進行效率分析。
問題:這實際上並沒有更新用戶'級別'字段。我究竟做錯了什麼?
// Define our user schema
var UserSchema = new mongoose.Schema({
...
points: {type: Number, default: 0, set: pointsChangeHandler},
level: {name: String, minPoints: Number, maxPoints: Number},
...
});
以及設置器看起來像這樣:作出
function goodPointsChangeHandler(newValue) {
var self = this;
if (newValue != self.goodPoints) {
console.log('Point change detected.');
// Find level that corresponds with new point total
Level.findOne({
'minPoints': {$lte : self.goodPoints},
'maxPoints': {$gt : self.goodPoints}}, '-_id').lean().exec(function(err, level) {
if (self.goodLevel == undefined || self.goodLevel.rank != level.rank) {
console.log('Level changed.');
self.goodLevel = level;
}
return newValue;
});
}
return newValue;
}
你似乎並不實際要保存'()'荷蘭國際集團的文件。 – laggingreflex 2015-02-07 17:17:55
我在這裏看到過類似的問題http://thatextramile.be/blog/2011/08/using-mongooses-setters-to-get-calculated-properties/其中沒有明確的save()。根據那篇文章,我假設'this'在函數返回後被保存 - 如果不是這樣,那麼這就是我的問題... – 2015-02-07 17:32:56
您必須明確地保存它才能將更改保存到數據庫中。 – laggingreflex 2015-02-07 17:34:47