使用此user.meta.logins.$inc();
时,我在控制台中收到此错误:
Mongoose MongooseNumber#$ inc / MongooseNumber#increment已弃用。 使用Model.update()代替v3中的增量。
我所做的就是这个(代码被剥离到基本用法):
userSchema.methods = {
userFind : function (user, pass, callback) {
this.model('user').findOne({ 'username':user, 'password':pass }, callback);
}
}
var userModel = new model();
userModel.userFind(username, password, function(err, user) {
user.meta.logins.$inc();
user.meta.last_action = new Date();
user.save();
});
这很好用,但由于弃用即将到来,我想使用建议的Model.update()
方法来更新用户,但是我无法实现。
我尝试过userModel.update()
和user.update()
,但在这两种情况下我都会遇到错误。也许我的语法对于更新是错误的。
非常感谢任何想法。
答案 0 :(得分:0)
要使用update
:
userModel.update(
{ 'username': user, 'password': pass },
{ $inc: { logins: 1 }, $set: { last_action: new Date() }},
function(err, numAffected) {
...
});
答案 1 :(得分:0)
所以这就是问题和解决方案:
定义Schema.methods时,必须创建模型的实例才能使用它们:
var myModel = new Model();
myModel.mySchemaMethod();
导致问题,因为模型自己的方法(例如Model.update)不再可访问。
在这种情况下,方法应该定义为静态,因此不需要实例,并且一切正常:
myModel.mySchemaStatic();