node.js - 猫鼬在保存到数据库时返回 ObjectParameterError()
问题描述
我有一个餐厅模式和一个评论模式......每当我尝试使用 create() 方法在猫鼬数据库中包含评论时,它都会生成错误:
ObjectParameterError:Document() 的参数“obj”必须是一个对象,在新的 ObjectParameterError (/workspace/groomIDE-setup123/restaurants/node_modules/mongoose/lib/error/objectParameter.js:25:11) 处获得了非常昂贵的位置
我的模式如下:
var restSchema = new mongoose.Schema({
title: String,
review: String,
image: String,
reviews:[{
type:mongoose.Schema.Types.ObjectId,
ref:"Review"
}
]
})
var reviewSchema = new mongoose.Schema({
author:{
id:{
type:mongoose.Schema.Types.ObjectId,
ref:"User"
},
username:String
},
review:String
});
创建新评论并显示的路径如下:
app.post("/restaurants/:id/reviews",(req,res)=>{
Restaurant.findById(req.params.id,(err,foundRestaurant)=>{
if(err)
console.log(err);
else
Review.create(req.body.comment,(err,newReview)=>{
if(err)
console.log(err);
else{
newReview.author.id=req.user._id;
newReview.author.username=req.user.username;
newReview.save();
foundRestaurant.reviews.push(newReview);
foundRestaurant.save();
// res.redirect("/restaurants/"+req.params.id);
}
})
})
});
app.get("/restaurants/:id",(req,res)=>{
Restaurant.findById(req.params.id).populate("reviews").exec((err,foundRestaurant)=>{
if(err)
console.log(err);
else{
res.render("show",{restaurant:foundRestaurant});
}
})
});
解决方案
Mongoosecreate()
函数需要获取与模式匹配的值。您可以在此处阅读更多相关信息:https :
//mongoosejs.com/docs/api.html#model_Model.create 尝试定义新的 newReview 对象,然后将其推送到 foundRestaurant.reviews 数组中,如下所示:
设置新的审查对象:
const newReview={
author.id:req.user._id,
username:req.user.username,
};
创建并保存它:
Review.create(newReview);
然后将其推入 Restaurant.reviews 数组:
foundRestaurant.reviews.push(newReview);
希望这是有道理的
推荐阅读
- python - 熊猫:选择索引,然后选择多索引切片上的列
- intellij-idea - Force push keyboard shortcut in IntelliJ IDEA 2018.1
- html - 如何将模式的第一个字符与其余字符分开?
- r - Fill a polygon with gradient scale in R
- tensorflow - 在带有 AMD Radeon Pro 450 2048 MB 的 Mac High Sierra 10.13.4 上支持 GPU 的 Tensorflow?
- java - 如何将小 ORC 文件合并或合并为更大的 ORC 文件?
- logging - 将日志文件输出到集群选项
- html - Why does my footer have elements under it?
- c - AES decryption without padding in crypt file
- python - 使用带有多个参数的函数与`map`