Запрос Mongoose - применить выбор после получения - PullRequest
0 голосов
/ 28 января 2019

У меня есть схема с подсхемой, похожей на эту:

const mealSchema = new Schema({
    entree: String,
    dessert: String,
    confirmed: Boolean
})

const eventSchema = new Schema({
    date: Date,
    entertainment: String,
    meal: {
       type: mealSchema,
       get: meal => meal && meal.confirmed ? meal: "TBA";
    }
})

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

Я также не хочу, чтобы confirmed отображалось пользователям, поэтому в моем Express API я использую что-то вродеthis:

router.get('/events', async (req, res) => {
   const events = await Event.find(req.query, '-meal.confirmed');
   res.send(events);
})

В приведенном выше примере -meal.confirmed удаляет свойство confirmed из meal, однако также делает бесполезным геттер.К тому времени, когда вызывается геттер, confirmed уже удален, поэтому логика того, что возвращать, не применяется.

Я могу удалить селектор из запроса и использовать хакерское решение, подобное этому:

get: meal => {
    if (meal && meal.confirmed) {
        return {
            entree: meal.entree,
            dessert: meal.dessert
        }
}

но я бы предпочел проработать это через Mongoose.

Есть идеи?

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