Error: TypeError: user.insertOne is not a function using mongoose

Error: TypeError: user.insertOne is not a function using mongoose

我在创建要发送到 MongoDB 的路由时遇到困难。 当我 return 用户时,它 return 是完整的数据库。这适用于使用 User 或 'user'。 用户是模型 let User = require('../models/user.model');

 User.findById(req.params.id)
    .then(user => {
        if (!user)
            res.status(404).send("data is not found");
        else
            for(var key in req.body.proposal) {
                //res.send(user.proposal)
                //res.send(user)
                //res.send(User.username)
                user.proposal.insertOne(
                    { 
                        "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 
                    } //update
                )
            }
     user.save()
        .then(user => res.json(user))
        .catch(err => res.status(400).json('Error: ' + err));   
    })
    .catch(err => res.status(400).json('Error: ' + err));
});

提前致谢!

应该是这样的:

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,这是猫鼬模型的一个功能,可以将新文档插入集合,但不能将新字段插入对象。您需要做的就像使用 .js 代码向 json 对象添加新字段一样,但是 mongoose 会跟踪对象的更改,当您使用 .save() 时,它可以使用所有这些更改更新集合中的文档。

您可以在一次调用中完成,而不是两次 DB 调用,检查:.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));