Mongoose: como filtrar uma matriz de objectos dentro de um objecto

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 matchpropriedade é onde você digita sua consulta.

Post.findById(id)
    .populate({ path: 'comments', match: { 'type': 'public' } })
    .exec((err, postWithFilteredComments) => {
        res.json({ postWithFilteredComments })
    })

Acho que você gosta

Origin http://10.200.1.11:23101/article/api/json?id=384490&siteId=1
Recomendado
Clasificación