所以这很可能很简单,但我花了一整天时间尝试不同的方法并使用Google搜索解决方案。
由于某种原因,当我使用+ 2个数字而不是将数字加在一起时,节点正在加入数字。
Company.findById(req.id, (err, doc) => {
if (err) {
callback(err, err);
} else {
var i = doc.TotalGranted; // i.e number value of 200
var e = doc.TotalAvailable; // i.e number value of 200
var newTotalgranted = i + req.newNumber; // i.e number value of 100
var newAvailable = e - req.newNumber; // i.e number value of 100
doc.TotalGranted= newTotalgranted;
doc.TotalAvailable= newAvailable;
doc.save((err, doc) => {
if (err) {
callback(err, err);
}
callback(null, 'success');
});
}
});
现在而不是totalgranted = 300而不是200,100
如果它有帮助,这里是来自mongo的返回文档的相关部分,这些不包含在数组中
TotalAvailable: 200,
TotalGranted: 200,
newNumber: '100',
新号码是一个字符串,但它实际上来自返回的文件。所以也许我需要从我尝试过的字符串中转换newNumber但是无法解决它。
答案 0 :(得分:1)
是的,你是对的,你的req.newNumber
是一个字符串,所以javascript默认执行字符串连接。
Company.findById(req.id,(err,doc)=> {
if (err) {
callback(err, err);
} else {
var i = doc.TotalGranted; // i.e number value of 200
var e = doc.TotalAvailable; // i.e number value of 200
var newNumber = parseInt(req.newNumber); // or use Number(req.newNumber) or (req.newNumber * 1)
var newTotalgranted = i + newNumber; // i.e number value of 100
var newAvailable = e - newNumber; // i.e number value of 100
doc.TotalGranted= newTotalgranted;
doc.TotalAvailable= newAvailable;
doc.save((err, doc) => {
if (err) {
callback(err, err);
}
callback(null, 'success');
});
}
});
这可行,但最好的方法是从请求参数本身获取一个数字,这将减少将字符串转换为整数的开销
您可以从字符串here
了解有关数字转换的各种策略的详情答案 1 :(得分:1)
尝试,
Company.findById(req.id, (err, doc) => {
if (err) {
callback(err, err);
} else {
var i = doc.TotalGranted; // i.e number value of 200
var e = doc.TotalAvailable; // i.e number value of 200
var newTotalgranted = (i + (req.newNumber * 1)); // i.e number value of 100
var newAvailable = (e - (req.newNumber * 1); // i.e number value of 100
doc.TotalGranted= newTotalgranted;
doc.TotalAvailable= newAvailable;
doc.save((err, doc) => {
if (err) {
callback(err, err);
}
callback(null, 'success');
});
}
});