node.js - MongoDB 更新字段数据
问题描述
我如何使用 db.findAndUpdate 表用户并将我的余额从以前的金额更改为新的?我试图保持平衡,结果什么也没显示,现在我很困惑在 findAndUpdate 中写。这是我的代码:
接口:
app.post('/api/account/transfer', (req, res, next) => {
const { body } = req;
const {
sender,
receiver,
amount,
user,
balance,
} = body;
if (!sender) {
return res.send({
success: false,
message: 'Error: Sender cannot be blank!'
});
}
if (!receiver) {
return res.send({
success: false,
message: 'Error: Receiver cannot be blank!'
});
}
if (!amount) {
return res.send({
success: false,
message: 'Error: Fill Amount!'
});
} else if(balance < amount || balance == 0) {
return res.send({
success: false,
message: 'Insufficient funds!'
});
}
//save the new transaction
const newTransaction = new Transaction();
newTransaction.sender = sender;
newTransaction.receiver = receiver;
newTransaction.amount = amount;
newTransaction.save( (err, transaction) => {
if(err) {
return res.send({
success: false,
message: 'Error: Server error.'
});
}else{
return res.send({
success: true,
message: 'Transfer Success!'
});
}
});
//update user balance
User.findOneAndUpdate({
});
所以我想要的是,如果我作为接收者,我的余额将会增加。
解决方案
试试这个,findOneAndUpdate 操作不会等待保存操作完成。
app.post('/api/account/transfer', (req, res, next) => {
const {
body
} = req;
const fields = ['sender', 'receiver', 'amount', 'balance'];
fields.forEach((field) => {
if (!body[field]) {
return res.send({
success: false,
message: 'Error: ' + field + ' cannot be blank!'
});
}
})
if (body.balance < body.amount || body.balance == 0) {
return res.send({
success: false,
message: 'Insufficient funds!'
});
}
//save the new transaction
let newTransaction = new Transaction();
// newTransaction = Object.assign(newTransaction, body); // If you want to copy all params from body to newTransaction
newTransaction.sender = body.sender;
newTransaction.receiver = body.receiver;
newTransaction.amount = body.amount;
newTransaction.save((err, transaction) => {
if (err) {
return res.send({
success: false,
message: 'Error: Server error.'
});
} else {
//update user balance
User.findOneAndUpdate({
/*query*/
}, {
/*body*/
}, (err, data) => {
if (err)
return res.send({
success: false,
message: 'Error: Server error.'
});
return res.send({
success: true,
message: 'Transfer Success!'
});
});
}
});
});
推荐阅读
- c++ - 我刚刚安装了 Visual Studio 并专门遇到了一些错误 WindowsSDKDir 属性未定义。可能找不到某些构建工具
- flutter - 如何将堆叠中的 2 个容器居中
- r - 在 r 中重复循环,直到一列中的值小于其他几列
- javascript - 如何为显示图像的每个嵌套 div 执行 javascript?
- r - 从子集列表中返回具有最少行数的数据框索引
- javascript - 如何使用javascript动态加载angularjs“ng-app”?
- flutter - 使用 sqflite 时出现颤振错误,表中没有这样的列
- php - OAuth2 - 我的访问令牌是服务器端机密,是的,那么如何将它与 AJAX 一起使用?
- python - 安装 python-telegram-bot 的问题:“python setup.py egg_info”
- architecture - Hyperledger Sawtooth Validator 节点如何在 Sawtooth 网络中拥有“大于最大连接性的对等点数”?