#javascript #node.js #mongodb #mongoose
#javascript #node.js #mongodb #mongoose
Вопрос:
Я хочу вернуть одно значение из моей модели, чтобы я мог сравнить его с текущим временем в моем промежуточном программном обеспечении. Все, что я нахожу в документах mongoose, должно возвращать массив… как мне просто получить значение для ключа ‘event_start’ из приведенного ниже:
const eventSchema = new Schema({
event_name: String,
venue_name: String,
address: String,
event_start: {
type: Date,
required: [true, 'Date amp; time of event start required']
},
event_end: {
type: Date,
required: [true, 'Date amp; time of event end required']
},
}
Вот что у меня есть до сих пор в моей функции. Я хотел бы найти по идентификатору (можно обновить ниже), поскольку у меня есть объект event_id, хранящийся в req.params:
module.exports.expiredEvent = (req, res, next) => {
const { id } = req.params;
const event = Event.find({ "_id": id })
Как мне вернуть значение для event_start из моей базы данных вместо объекта?
Комментарии:
1. вы пробовали
Event.find({},{_id:0,event_start:1});
, это все равно вернет объект, но содержит толькоevent_start
2. привет, @YahiaBadr — я немного изменил твое, потому что оно давало мне все значения event_start, и я хочу только для определенного события
const event = Event.find({ "_id" : id },{_id:0,event_start:1}).then(data => console.log(data));
, однако это возвращает [{ключ: значение }] . Есть идеи, как я получаю только значение?3. возможно ли ожидать результата и возвращать требуемую информацию следующим образом……….. module.exports.expiredEvent = асинхронный (запрос, повторный запуск, следующий) => { const { id } = запрос.параметры; const событие = ожидание события.найти({«_id»: id }, {_id:0,event_start:1}); возвращает событие[0].event_start; }
4. Вау @ShashikamalRC отличный вызов, обновленный код
const eventTimes = await Event.find({ "_id" : id },{_id:0, event_start:1}); console.log(eventTimes);
возвращает массив[ { event_start: 2022-01-13T17:26:00.000Z } ]
. Та же проблема, что и выше, но код намного чище.. как я мог получить только значение?5. При возврате выполняйте EventTimes[0].event_start. поскольку мы находим с помощью id, наверняка у нас будет один объект. Таким образом, мы можем получить к нему доступ с помощью 0 и вернуть обязательное поле.
Ответ №1:
module.exports.expiredEvent = async (req, res, next) => {
const { id } = req.params;
const event = await Event.find({ "_id": id }, {_id: 0, event_start: 1});
console.log(event); // [{event_start: 2022-01-13T17:26:00.000Z}]
return event[0].event_start; // this will return 2022-01-13T17:26:00.000Z
}
Комментарии:
1. Это сработало, спасибо! Я изменил последнюю строку, чтобы сохранить возвращаемое значение в переменной
const startTime = event[0].event_start;
Ответ №2:
Поскольку вы используете mongoose, вам следует попробовать findById
:
Event.findById(id, "event_start").exec();
Обратитесь к документу для получения более подробной информации.