У меня есть схема с подсхемой, похожей на эту:
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.
Есть идеи?