2012-07-05 4 views
0

Lorsque vous utilisez ce user.meta.logins.$inc(); je reçois cette erreur de la console:MongooseJS ne peut pas mettre à jour la valeur numérique

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

Ce que je beed faire est ce (le code est dépouillé à l'utilisation de base):

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

Cela fonctionne très bien, mais puisque la dépréciation est à portée de main, je veux utiliser la méthode Model.update() proposée pour mettre à jour l'utilisateur, mais je ne peux pas y arriver.

J'ai essayé de faire userModel.update() et user.update() mais dans les deux cas j'ai des erreurs. Peut-être que ma syntaxe est fausse pour la mise à jour.

Toutes les idées seraient grandement appréciées.

Répondre

0

Pour utiliser update pour cela:

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

que je l'ai déjà essayé, je vous remercie. Il génère cette erreur: 'Object {} n'a pas de méthode 'update'' – Evenflow

+0

Je supposais que' userModel' est votre classe Model pour les utilisateurs, mais cette ligne m'a confondu: 'var userModel = new model();' Vous devriez appeler 'update' sur l'objet retourné d'un appel comme' mongoose.model ('user', userSchema); 'où vous enregistrez le schéma. – JohnnyHK

+0

Oui, c'est ce que je fais, la ligne 'var userModel = new model();' est juste un wrapper qui retourne un modèle et une connexion. Comme vous pouvez le voir, j'appelle une méthode pour le schéma ('userModel.userFind') et cela fonctionne très bien, donc mon wrapper retourne le modèle et la connexion va très bien. – Evenflow

0

Donc, ce problème et ce la solution:

Lorsque vous définissez Schema.methods vous devez créer une instance du modèle afin de les utiliser :

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

qui pose un problème puisque les modèles propres méthodes (par exemple Model.update.) ne sont plus accessibles.

Dans ce cas, les méthodes doivent être définies comme statique, donc aucun cas est nécessaire et tout cela fonctionne très bien:

myModel.mySchemaStatic(); 
Questions connexes