MongoDB中通过存储另一集合ID的对象获取数据及博文评论关联问题
错误原因
- 查询博文文档时未使用Mongoose提供的
populate()关联填充方法,返回的got.comment字段仅存储了关联评论的ObjectId数组,并非完整的评论实体数据 - 对普通ID数组执行
find({})属于非法操作,数组本身不具备该查询方法,自然无法拿到正确的评论数据
修复后的路由代码
app.get("/post/:postname",(req,res)=>{ const requesttitle = req.params.postname; // 查询博文时直接填充comment关联字段 Blog.findOne({_id: requesttitle}).populate('comment').exec((err ,got)=>{ if(err){ console.log(err) return res.status(500).send('查询失败') } // 此时got.comment已经是完整的评论对象数组,直接传递给模板即可 console.log(got.comment) res.render('post',{post:got }); }) })
额外注意事项
- 确保定义Comment模型时的命名和Schema中
ref字段值完全一致,示例:mongoose.model('Comment', commentSchema),大小写不要出错 - 如果你的路由参数
:postname实际存储的是博文slug而非_id,请自行修改findOne的查询条件 - 新增评论时记得同时把评论的_id推入对应博文的
comment数组中,保证关联关系正常存储
内容的提问来源于stack exchange,提问作者Tushar
相关产品推荐
相关产品推荐

