.save()不会将所有内容保存在模型中

时间:2019-12-25 09:44:28

标签: node.js mongodb mongoose

这是控制器中的方法

exports.shareProve = async (req, res) => {
    summ = 0; count = 0;
    company = await companyModel.findById(req.body.companyId);
    for(let i = 0; i < req.body.sum.length; i++) {
        if(req.body.sum[i] > 0) {
            count++
            summ += Number(req.body.sum[i]);
        }
    }
    if(company.shareholders.share[0] - summ < 0) {
        res.redirect('back');
    }
    else {
        for(let i = 0; i < req.body.sum.length; i++) {
            /*man = await personModel.findById(req.body.userId[i]);
            man.stocks.id.push(companyId);
            man.stocks.share.push(req.body.sum[i]);
            man.save();*/
            if(req.body.sum[i] > 0) {
                company.shareholders.users.push(req.body.userId[i]);
                company.shareholders.share.push(req.body.sum[i]);
                company.shareholders.share[0] -= req.body.sum[i];
            }
        }
        console.log(company.shareholders.share);
        //await company.updateOne({$set: {'shareholders.share.0': company.shareholders.share[0]}});
        await company.save();
        //res.redirect('back');
    }
}

这就是我的模型的样子

companySchema = mongoose.Schema({
    _id: companyId,
    name: String,
    ownerId: {
        type: userId,
        ref: 'person'
    },
    users: {
        type: [userId],
        ref: 'person'
    },
    shareholders: {
        users: [{
            type: [userId],
            ref: 'person'
        }],
        share: [Number]
    },
    gameId: {
        type: gameId,
        ref: 'game'
    },
    balance: Number, //ссылка на таблицу счетов
    license: String, //ссылка на таблицу лицензий
    salary: Number
});

使用这种方法之前就是我的公司

{
  "_id": "5e032e9164b0d61dc45a5ea5",
  "shareholders": {
    "users": [
      "5df7292e7d3bfb36c07e8cc5"
    ],
    "share": [
      100
    ]
  },
  "users": [],
  "name": "22222",
  "ownerId": "5df7292e7d3bfb36c07e8cc5",
  "gameId": "5dfe870e1a1d1a3c60b57ed0",
  "__v": 2
}

使用此方法后,这就是我在db中的公司

{
  "_id": "5e032e9164b0d61dc45a5ea5",
  "shareholders": {
    "users": [
      "5df7292e7d3bfb36c07e8cc5",
      "5df41befc518db3120f96199",
      "5df00801fa0b9a0d00e05f4f"
    ],
    "share": [
      100,
      14,
      18
    ]
  },
  "users": [],
  "name": "22222",
  "ownerId": "5df7292e7d3bfb36c07e8cc5",
  "gameId": "5dfe870e1a1d1a3c60b57ed0",
  "__v": 2
}

console.log()给了我that

但是当我尝试在db中保存更改时,我有that

没有company.updateOne(),它不会为我保存数组中的第一项。为什么?我听说在这种情况下updateOne()是错误的,我应该使用save。对象股东也许有问题吗?

0 个答案:

没有答案