我有一个帖子列表,每个帖子包含一组评论,每个评论可能是私人的,也可能是公共的,我想向管理员显示所有私人和公共的评论,但是普通用户我只想向他们显示公共评论。
这是发布和评论模式的一部分:
const PostSchema = new mongoose.Schema({
title: String,
comments: [{ type: Schema.Types.ObjectId, ref: 'Comment' }]
})
const CommentSchema = new mongoose.Schema({
body: String,
type: { type: String, enum: ['public', 'private'] }
})
这是我随附的解决方案: 按ID抓取帖子:
const post= await Post.findById(id);
然后过滤:
post.comments = post.comments.filter(c => c.type != "private");
return res.json(post)
但如果可能的话,我想用全猫鼬做它。
答案 0 :(得分:2)
更新您的评论架构:
const CommentSchema = new mongoose.Schema({
body: String,
public: Boolean,
post: { type: Schema.Types.ObjectId, ref: 'Post' }
})
您可以使用猫鼬的populate()
方法提取特定帖子下的评论。 match
属性是您输入查询的地方。
Post.findById(id)
.populate({ path: 'comments', match: { 'type': 'public' } })
.exec((err, postWithFilteredComments) => {
res.json({ postWithFilteredComments })
})