首页 > 解决方案 > 猫鼬在保存到数据库时返回 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});
            }
    })
});

标签: node.jsmongodbmongoose

解决方案


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

希望这是有道理的


推荐阅读