猫鼬在保存到数据库时返回ObjectParameterError()

时间:2020-03-04 15:48:43

标签: node.js mongodb mongoose

我有一个餐厅模式和一个评论模式。...每当我尝试使用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});
            }
    })
});

1 个答案:

答案 0 :(得分:0)

猫鼬create()函数需要获取与架构匹配的值。 您可以在这里了解更多信息: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);

希望这很有意义

相关问题