magro :
Eu tenho uma lista de mensagens e cada post contém uma série de observações, cada comentário pode ser privado ou público e eu quero mostrar Administradores todos os comentários públicos e privados, mas os usuários normais que eu quero mostrar-lhes apenas comentários públicos.
aqui está uma parte do post e comentário de esquema:
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'] }
})
aqui está a solução que eu vim com: Agarre a mensagem por id:
const post= await Post.findById(id);
e, em seguida, filtrar:
post.comments = post.comments.filter(c => c.type != "private");
return res.json(post)
mas eu quero fazê-lo mangusto completo se isso é possível.
jstarnate:
Atualizar o esquema do comentário:
const CommentSchema = new mongoose.Schema({
body: String,
public: Boolean,
post: { type: Schema.Types.ObjectId, ref: 'Post' }
})
Você pode usar do mangusto populate()
método para extrair os comentários sob um posto específico. A match
propriedade é onde você digita sua consulta.
Post.findById(id)
.populate({ path: 'comments', match: { 'type': 'public' } })
.exec((err, postWithFilteredComments) => {
res.json({ postWithFilteredComments })
})