【问题标题】:How to update multiple arrays in a document?如何更新文档中的多个数组?
【发布时间】:2019-10-04 23:18:19
【问题描述】:

给定一个像猫鼬这样的模式 我正在尝试使用此 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】:

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

    这样的事情应该可以解决问题:

    await User.findOneAndUpdate(
        {
            _id: req.session.userId,
            portfolio.name 'indicateHereThePortfolioNameYouWantToUpdate'
        }, 
        {
            $push: {transactions: transactionToAdd}
            $set: {
                balance: sum,
                portfolio.$.shares: newShareValue
            }
        });
    

    【讨论】:

    • 这不是我想要的,问题是我必须总结份额并利用用户欠它,否则它会附加它
    • 在这种情况下,我认为您需要执行多个查询。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-07
    • 1970-01-01
    • 1970-01-01
    • 2018-09-05
    • 1970-01-01
    • 1970-01-01
    • 2011-10-05
    相关资源
    最近更新 更多