2014-06-08 25 views
0

我试图在我的Node.js项目中使用Mongoose中的the $max update operator,但我认为a)我要么做了一些可怕的错误,要么b)Mongoose不支持这个功能。 (使用该为例):

var updateGameScores = function(game, newScore, callback) { 
    models.Scores.update({ 
    gameName: game 
    }, { 
    $set: { 
     $max: { 
     highestScore: newScore 
     } 
    } 
    }, { 
    upsert: true 
    }, function(err) { 
    callback(err); 
    }); 
}; 

使我有以下错误:

MongoError: The dollar ($) prefixed field '$max' in '$max' is not valid for storage. 

我无法找到有关此方面的猫鼬文档任何东西(或类似功能),这表明猫鼬不支持这一点。 如果确实如此,有什么替代方法可以实现这个**,同时最大限度地减少数据库操作的数量?

**:“更新为指定的值的字段的值,如果指定值大于所述字段的当前值大于”

预先感谢。

+0

您认为$ max会在此更新中为您做些什么? –

+0

@EdwinDalorzo根据(我的解释)[MongoDB的文档](http://docs.mongodb.org/manual/reference/operator/update/max/#up._S_max),我希望它只会更新如果newScore大于旧字段值(如果该字段不存在,只需将其设置为newScore),则可以选择highestScore字段。 – mickdekkers

+1

@Soulleswaffle正如您在共享的例子中看到的那样,当您使用$ max时,您不需要使用$ set,它看起来像$集合被$ max所隐含。也许这就是导致问题的原因。 –

回答

1

考虑写你的更新表达

{ $max: { highestScore: newScore } } 

由于$最大运营商已经暗示了$set