2012-07-05 38 views
0

當使用這種user.meta.logins.$inc();我得到這個錯誤在控制檯:MongooseJS不能更新數值

Mongoose MongooseNumber#$inc/MongooseNumber#increment is deprecated. Use Model.update() to get incrementation in v3 instead.

我所齋做的是這個(代碼被剝離下來的基本用法):

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

要查看這使用update

userModel.update(
    { 'username': user, 'password': pass }, 
    { $inc: { logins: 1 }, $set: { last_action: new Date() }}, 
    function(err, numAffected) { 
    ... 
}); 
+0

那我已經試過了,謝謝你。它產生這個錯誤: '對象{}沒有方法'更新'' – Evenflow 2012-07-05 13:46:58

+0

我假設'userModel'是你的Model類的用戶,但是這一行讓我感到困惑:'var userModel = new model();'你應該從'mongoose.model('user',userSchema)''調用返回的對象上調用'update';'註冊模式的地方。 – JohnnyHK 2012-07-05 14:08:23

+0

是的,這就是我所做的,'var userModel = new model();'只是一個返回模型和連接的包裝器。你可能會看到,我正在調用Schema('userModel.userFind')的一個方法,並且工作得很好,所以我的包裝返回模型和連接就好了。 – Evenflow 2012-07-05 14:46:03

0

因此,這此問題和解決方法:

當你定義Schema.methods你必須按順序使用它們來創建模型的實例:

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

由於模型自己的方法(如Model.update)不再可訪問,所以會導致問題。

在這種情況下,方法應定義爲靜態的,因此不需要實例,並將其所有工作得很好:

myModel.mySchemaStatic();