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));
我在创建要发送到 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));