Model 猫鼬可以';t更新数值

Model 猫鼬可以';t更新数值,model,mongoose,updates,Model,Mongoose,Updates,使用此user.meta.logins.$inc()时我在控制台中收到此错误: Mongoose MongooseNumber#$inc/MongooseNumber#增量不推荐使用。 改为使用Model.update()在v3中获取增量 我一直在做的是(代码被剥离到基本用法): 这工作得很好,但由于反对意见即将出台,我想使用建议的Model.update()方法来更新用户,但我无法做到这一点 我试过做userModel.update()和user.update(),但在这两种情况下我都会出错。

使用此
user.meta.logins.$inc()时我在控制台中收到此错误:

Mongoose MongooseNumber#$inc/MongooseNumber#增量不推荐使用。 改为使用Model.update()在v3中获取增量

我一直在做的是(代码被剥离到基本用法):

这工作得很好,但由于反对意见即将出台,我想使用建议的
Model.update()
方法来更新用户,但我无法做到这一点

我试过做
userModel.update()
user.update()
,但在这两种情况下我都会出错。也许我的语法对于更新是错误的


如果您有任何想法,我们将不胜感激。

若要使用
更新
,请执行以下操作:

userModel.update(
{'username':用户,'password':pass},
{$inc:{logins:1},$set:{last_action:new Date()},
功能(错误,未受影响){
...
});

因此,问题和解决方案如下:

定义Schema.methods时,必须创建模型实例才能使用它们:

var myModel = new Model();
myModel.mySchemaMethod();
这会导致一个问题,因为模型本身的方法(例如Model.update)不再可访问

在这种情况下,应该将方法定义为静态的,因此不需要实例,而且一切正常:

myModel.mySchemaStatic();

我已经试过了,谢谢。它产生了这个错误:
Object{}没有方法“update”
我假设
userModel
是您的用户模型类,但这一行让我感到困惑:
var userModel=newmodel()
您应该调用
update
,调用从
mongoose.model('user',userSchema)这样的调用返回的对象注册模式的地方。是的,我就是这么做的,行
var userModel=newmodel()
只是一个返回模型和连接的包装器。如您所见,我正在为模式调用一个方法(
userModel.userFind
),该方法工作正常,因此我的包装器返回的模型和连接正常。这一切都搞砸了
userSchema.methods
定义模型实例上的方法,因此您应该使用
userSchema.statics
定义
userFind
,以便它显示在模型本身上。然后您需要对模型本身而不是模型实例调用
update
myModel.mySchemaStatic();