这是控制器中的方法
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
。对象股东也许有问题吗?