Masiar Masiar - 1 year ago 41
Node.js Question

mongoose updating a field in a MongoDB not working

I have this code

var UserSchema = new Schema({
Username: {type: String, index: true},
Password: String,
Email: String,
Points: {type: Number, default: 0}


var User = db.model('User');
* Function to save the points in the user's account
function savePoints(name, points){
if(name != "unregistered user"){
User.find({Username: name}, function(err, users){

var oldPoints = users[0].Points;
var newPoints = oldPoints + points;

User.update({name: name}, { $inc: {Points: newPoints}}, function(err){
console.log("some error happened when update");
console.log("update successfull! with name = " + name);
User.find({Username: name}, function(err, users) {
console.log("updated : " + users[0].Points);


savePoints("Masiar", 666);

I would like to update my user (by finding it with its name) by
updating his/her points. I'm sure oldPoints and points contain a
value, but still my user keep being at zero points. The console prints
"update successful".

What am I doing wrong? Sorry for the stupid / noob question.


Answer Source

It seems you are doing a few unstandard things:

  • Use findOne instead of find if you want to load just one user
  • Calling Model.update should be done to update records that you have not loaded
  • $inc is adding oldPoints, so the new value will be 2*oldPoints + newPoints
  • You are using name as the conditional query instead of Username

I would rewrite the code into something like this:

User.findOne({Username: name}, function(err, user){
  if (err) { return next(err); }
  user.Points += points; {
    if (err) { return next(err); }