Прикрепление пользовательского поля к схеме Mongoose - PullRequest
0 голосов
/ 26 июня 2018

Итак, у меня есть История и Комментарий модель. Также у меня есть маршруты INDEX и SHOW.

Итак, на маршруте INDEX я заинтересован в том, чтобы вернуть только количество опубликованных комментариев. Я сделал следующий метод:

StorySchema.methods.comments = function (cb) {
    return this.model('Comment').find({ storyId: this._id, published: true }, cb);
}

И это мой маршрут INDEX (в настоящее время показаны 4 новейших истории):

Story.find({}, '-content')
        .sort('-dateCreated')
        .limit(4)
        .exec((err, found) => {
            found.map(async f => f.comments = await f.comments())

            if (err) return res.json({ err });

            res.json(found);
        })

У меня нет комментариев поля, определенного в StorySchema, но я хочу присоединить его только по показательным причинам, я не собираюсь его сохранять. Проблема в том, что комментарии поле не отображается. Даже если я определю его в схеме, он не изменится.

Как мне прикрепить поле к документу mongoose, только для демонстрации?

1 Ответ

0 голосов
/ 26 июня 2018

Запрос, который вы написали выше

Story.find({}, '-content')

эквивалентно

Select -content from Story

Inshort: когда вы проецируете поле, которое будет добавлено в ответ, это единственное поле, которое будет проецироваться на вас в качестве ответа.

Для вашего случая вы можете рассмотреть возможность использования aggregation каркаса и его конвейера $project или $addField, вот почему они здесь. Я имею в виду, что они не изменяют схему вашего документа. И да, их можно легко использовать для проецирования дополнительных полей в вашем ответе. И вы даже можете использовать несколько операторов или выражений для добавления значений в эти фиктивные поля

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...