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();