Intereting Posts

mongoose更新MongoDB中的字段不工作

我有这个代码

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){ if(err){ console.log("some error happened when update"); } else{ console.log("update successfull! with name = " + name); User.find({Username: name}, function(err, users) { console.log("updated : " + users[0].Points); }); } }); }); } } savePoints("Masiar", 666); 

我想通过更新他/她的点数来更新我的用户(通过find它的名字)。 我确信oldPoints和points包含一个值,但是我的用户仍然保持在零点。 控制台打印“更新成功”。

我究竟做错了什么? 对不起愚蠢/ noob问题。

Masiar

Solutions Collecting From Web of "mongoose更新MongoDB中的字段不工作"

看来你正在做一些不标准的事情:

  • 如果只想加载一个用户,则使用findOne而不是find
  • 应该调用Model.update来更新尚未加载的logging
  • $inc正在添加oldPoints,所以新值将是2 * oldPoints + newPoints
  • 您正在使用name作为条件查询而不是Username

我会重写代码到这样的东西:

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

按照我的代码人

  User.update({ username: "faibaa" }, { $inc: { point: 200000 } }, function(err,data){ return res.send(data); });