Mongodb 错误:TypeError:user.insertOne不是使用mongoose的函数

Mongodb 错误:TypeError:user.insertOne不是使用mongoose的函数,mongodb,mongoose,mongodb-query,mongoose-schema,mern,Mongodb,Mongoose,Mongodb Query,Mongoose Schema,Mern,我很难创建发送到MongoDB的路由。 当我返回user时,它返回完整的数据库。这适用于使用用户或“用户”。 用户是一个模型 let User=require('../models/User.model') 提前谢谢你 应该是这样的: let proposalArr = []; for (const key in req.body.proposal) { proposalArr.push({ uid: req.body.proposal[key].uid, clientEma

我很难创建发送到MongoDB的路由。 当我返回user时,它返回完整的数据库。这适用于使用用户或“用户”。 用户是一个模型
let User=require('../models/User.model')


提前谢谢你

应该是这样的:

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调用,请检查并尝试以下示例代码:

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));

应该是这样的:

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调用,请检查并尝试以下示例代码:

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));

非常感谢。工作非常好。是因为在查询结果中使用了Inserton。谢谢。工作非常好。是因为对查询结果使用了Inserton。