错误:TypeError:user.insertOne不是使用猫鼬的函数

时间:2020-03-22 04:49:28

标签: mongodb mongoose mongodb-query mongoose-schema mern

我在创建发送到MongoDB的路由时遇到困难。 当我返回用户时,它将返回完整的数据库。这适用于使用用户或“用户”。 用户是模特 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));
});

谢谢你!

1 个答案:

答案 0 :(得分:0)

应该是这样的:

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,它是mongoose模型的功能,用于将新文档插入到集合中,而不是将新字段插入到对象中。您需要做的就像使用.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));