0

使用它时,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()但在这两种情况下我都会出错。也许我的语法对于更新是错误的。

任何想法将不胜感激。

4

2 回答 2

0

为此update

userModel.update(
  { 'username': user, 'password': pass },
  { $inc: { logins: 1 }, $set: { last_action: new Date() }},
  function(err, numAffected) {
    ...
});
于 2012-07-05T13:15:44.160 回答
0

所以这就是问题和解决方案:

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

var myModel = new Model();
myModel.mySchemaMethod();

这会导致问题,因为模型自己的方法(例如 Model.update)不再可访问。

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

myModel.mySchemaStatic();
于 2012-07-05T14:58:39.000 回答