Возвращает значение из mongodb (не массива) с использованием mongoose

#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();
 

Обратитесь к документу для получения более подробной информации.