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
看来你正在做一些不标准的事情:
- 如果只想加载一个用户,则使用
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); });
- 在Mocha中使用Supertest来testingNode.js Express API和MongoDB
- 如何获得在MongoDB与mongoosefindAndModify func的返回值?
- Docker撰写:NodeJS + MongoDB
- 如何在$ match的MongoDB聚合查询中使用$ regex
- expressionjs如何将数组转换为对象
- Node.js中的Mongoose静音崩溃
- ObjectID.createFromHexString不识别input的hexstring
- 基于SOA的产品使用MongoDB的BI / Anaytics技术
- 保存来自OpenShift Mongodb的文档