首页 > 解决方案 > 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({
    });

这是屏幕截图: 交易

所以我想要的是,如果我作为接收者,我的余额将会增加。

标签: node.jsmongodbreactjsexpressmongodb-query

解决方案


试试这个,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!'
                });
            });
        }
    });
});

推荐阅读