@seregindev

Как изменить данные массива, вложенного в объект?

Доброго времени суток, столкнулся с проблемой: Не получается изменить данные массивов, вложенных в объект и доступных по ключу. Нужно изменять массивы в subEvents

Код
exports.addVisitor = (req, res) => {
  const { visitorId, eventId, subEvents } = req.body;

  Event.findById(eventId, (err, event) => {
    if (err) return res.status(500).send({ message: "Error finding note with id " + eventId });

    //принимаю объект, в котором хранятся ключ: булвое значение
    //если всё ок, то мы пушим айду в наш массив
    for (let subEvent of Object.keys(subEvents)) {
      if(subEvents[subEvent]) {
        event.subEvents[subEvent].push(visitorId);
      } else {
        event.subEvents[subEvent].filter(ev => ev != visitorId);
      }
    }
    event.visitors.push(visitorId);

    event.save((err, event) => {
      if (err) return res.status(500).send({ message: "Error finding note with id " + eventId });

      res.send(event);
    })
  })
}


Схема бд и пример экземпляра5acb9dcb3ec83362751691.png5acb9dd884f6c829199885.png
  • Вопрос задан
  • 564 просмотра
Пригласить эксперта
Ответы на вопрос 1
@Abigovor
full-stack developer (javascript/java)
Вам из модели необходимо получить обычный js объект.

Это можно сделать следующими путями:
1. Вызвать метод toObject() , после чего изменять объект
ссылка на доки: mongoosejs.com/docs/api.html#document_Document-toObject
2. вызвать метод .lean() что позволит mongoose вернуть обычный js объект
пример MyModel.findOne().lean().exec(function(err, doc) {
...
});
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы