如何更新文档中的多个数组?

问题描述 投票:0回答:1

给出类似猫鼬的架构我正在尝试使用此POST来获取股票的当前价格,并将其与用户的余额相匹配。如果库存少于用户剩余,则应从余额中减去。完成后,如果用户拥有投资组合,则投资组合应更新股份总数,并将交易推送到用户阵列。

var UserSchema = new mongoose.Schema({
    email : { type: String, unique: true, required: true, trim: true},
    name  : { type: String, required: true},
    password : { type: String, required: true},
    balance : {type: Number, default: 5000},
    transactions : [
        {
            name : { type: String, required: true},
            buy_or_sell : {type: Boolean, required: true},
            shares : {type: Number, required: true},
            value : {type: Number, required: true}
        }
    ],
    portfolio : [
        {
            name : { type: String, unique: true, required: true },
            shares : { type: Number, required: true }
        }
    ]

});
router.post('/portfolio', (req, res, next)=>{
  if (req.session.userId !== undefined){

    var ticker = (req.body.ticker).toLowerCase();
    var qty = req.body.qty;

    User.findOne({ _id: req.session.userId }).exec(async function(err, user) {
      var balance = user.balance;
      const data = await alpha.data.quote(`${ticker}`);
      var sum = Number((data['Global Quote']['05. price'] * qty).toFixed(2));
      if (sum < balance){
        let total = Number(balance-sum).toFixed(2)
        let doc = await User.findOneAndUpdate({_id: req.session.userId}, {balance : sum})
        ....
        ....
      }
    });

  } else {
    res.redirect('/')
  }

});
node.js mongodb express mongoose
1个回答
1
投票

在同一查询中,您可以更新文档的多个字段。要向阵列添加新条目,请使用$push。要更新数组的特定元素比较棘手,您需要将$push$set与过滤器配合使用才能知道要更新哪个元素。

类似的东西应该可以解决问题:

$set
© www.soinside.com 2019 - 2024. All rights reserved.