Являются ли данные возвращенными из Mongoose неизменяемыми? - программирование
Подтвердить что ты не робот

Являются ли данные возвращенными из Mongoose неизменяемыми?

Я хочу добавить к возвращаемым данным из запроса мангуста:

User.findById(userId, function(err, data) {
  if (!err) {
    data.newvar = 'Hello, world';
  }
});

Однако, когда я консоль регистрирую вывод, newvar не существует. Я также пробовал это, используя расширение Underscore:

_.extend(data, {'newvar': 'Hello, world'});

Не повезло. Поскольку у меня есть вложенные документы, использование мелкой копии не будет работать. Есть ли способ добавить данные здесь?

4b9b3361

Ответ 1

Один из способов справиться с этим состоит в том, чтобы преобразовать экземпляр модели mongoose в простой объект, который вы полностью контролируете, вызывая toObject() на нем:

User.findById(userId, function(err, data) {
  if (!err) {
    data = data.toObject();
    data.newvar = 'Hello, world';
  }
});

Если вам требуется более структурированное решение, вы можете добавить виртуальные атрибуты в свою схему, как описано здесь.

Ответ 2

Как оказалось, документы Mongoose являются их собственным специальным классом, а не стандартными объектами Javascript. Чтобы получить параметр javascript, который может быть расширен, вы должны использовать метод toObject().