错误:TypeError:user.insertOne 不是使用猫鼬的函数
Posted
技术标签:
【中文标题】错误:TypeError:user.insertOne 不是使用猫鼬的函数【英文标题】:Error: TypeError: user.insertOne is not a function using mongoose 【发布时间】:2020-07-02 21:10:22 【问题描述】:我在创建发送到 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】:应该是这样的:
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));
【讨论】:
谢谢。工作得很好。是因为在查询结果上使用了 insertOne。以上是关于错误:TypeError:user.insertOne 不是使用猫鼬的函数的主要内容,如果未能解决你的问题,请参考以下文章
TypeError:错误 #1009:无法访问空对象的属性或方法
Anvil 错误:TypeError:“NoneType”对象不可下标