Это должно быть примерно так:
let proposalArr = [];
for (const key in req.body.proposal) {
proposalArr.push({
uid: req.body.proposal[key].uid,
clientEmail: req.body.proposal[key].clientEmail,
summary: req.body.proposal[key].summary,
terms: req.body.proposal[key].terms,
form: req.body.proposal[key].form
});
}
user.proposal = proposalArr;
user.save().............
Вы не можете использовать .insertOne
в результате запроса к базе данных, это функция модели mon goose для вставки нового документа в коллекцию, но не вставлять новые поля в объекты. Вам нужно сделать то же самое, что добавить новые поля к объекту json, используя код. js, но mon goose будет отслеживать изменения объекта, а при использовании .save()
он может обновить документ в коллекции со всеми этими изменениями. .
Вместо двух вызовов БД вы можете сделать это за один вызов. Проверьте: .findByIdAndUpdate () и попробуйте следующий пример кода:
let proposalArr = [];
for (const key in req.body.proposal) {
proposalArr.push({
uid: req.body.proposal[key].uid,
clientEmail: req.body.proposal[key].clientEmail,
summary: req.body.proposal[key].summary,
terms: req.body.proposal[key].terms,
form: req.body.proposal[key].form
});
}
User.findByIdAndUpdate(
req.params.id,
{
proposal: proposalArr
},
{ new: true }
)
.then(user => {
if (!user) res.status(404).send("data is not found");
res.json(user);
})
.catch(err => res.status(400).json("Error: " + err));