我有这段代码想要编写,它的作用是在正确计算余额后更新MongoDB中的余额。问题在于,虽然它可以正确计算余额,但无法更新用户列的内容。我一直在寻找如何更新余额,但没有找到任何有帮助的信息。
我的代码如下:
我的代码如下:
const router = require("express").Router();
const User = require("../models/User");
const bcrypt = require("bcrypt");
const jwt = require("jsonwebtoken");
router.post("/update-balance/:email", async (req, res) => {
try {
if (
!req.headers.authorization ||
!req.headers.authorization.startsWith("Bearer ") ||
!req.headers.authorization.split(" ")[1]
) {
return res.status(422).json({ message: "Please Provide Token!" });
}
const amount = parseInt(req.body.amount);
const user = await User.find({ email: req.params.email });
const balance = parseInt(user[0].balance);
//return balance;
//console.log(balance);
const total_amt = amount + balance;
//console.log(total_amt);
// update Balance
const wallet_user = new User();
try{
await wallet_user.updateOne({email : req.params.email}, {$set: {balance: total_amt}});
}catch(err){
console.log(err);
}
return res.send({ error: false, message: "OK" });
} catch (error) {
res.status(404).json({ message: error.message });
}
});
module.exports = router;
我应该做什么,我做得不对,请帮帮我。
上面的代码显示了我尝试过的内容。
$set
会更新您传递的任何值,而不是像期望的那样添加。例如,如果当前余额为50,并使用{ $set: { balance: 7000 } }
进行更新,则新余额将为7000。另一方面,$inc
通过将任何值添加到当前值来更新余额。例如,使用{ $inc: { balance: 7000 } }
进行更新,则新余额将为7050,就像OP在其解决方案中建议的那样。 - chridam