Пн goose: как отфильтровать массив объектов внутри объекта - PullRequest
1 голос
/ 01 апреля 2020

У меня есть список постов, и каждый пост содержит массив комментариев, каждый комментарий может быть приватным или публичным c, и я хочу показать администраторам все приватные и публичные c комментарии, но обычным пользователям я хочу их показать только publi c комментарии.

здесь часть схемы поста и комментария:

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)

, но я хочу сделать это полностью mon goose, если это возможно.

1 Ответ

1 голос
/ 01 апреля 2020

Обновите схему комментариев:

const CommentSchema = new mongoose.Schema({
    body: String,
    public: Boolean,
    post: { type: Schema.Types.ObjectId, ref: 'Post' }
})

Вы можете использовать метод mon goose 'populate(), чтобы извлечь комментарии в указанной записи c. Свойство match - это место, где вы вводите свой запрос.

Post.findById(id)
    .populate({ path: 'comments', match: { 'type': 'public' } })
    .exec((err, postWithFilteredComments) => {
        res.json({ postWithFilteredComments })
    })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...