Как вы превращаете документ Mongoose в простой объект?

У меня есть документ из mongoose find, который я хочу расширить до кодирования JSON и отправить в качестве ответа. Если я попробую добавить свойства в документ, он будет проигнорирован. Свойства не отображаются в Object.getOwnPropertyNames(doc) что делает невозможным нормальное расширение. Странно, что JSON.parse(JSON.encode(doc)) работает и возвращает объект со всеми правильными свойствами. Есть лучший способ сделать это?

Model Mongoose наследуется от Document s, у которого есть метод toObject() . Я считаю, что то, что вы ищете, должно быть результатом doc.toObject() .

http://mongoosejs.com/docs/api.html#document_Document-toObject

Другой способ сделать это – сказать Mongoose, что все, что вам нужно, это простая версия JavaScript возвращаемого документа с помощью lean() в цепочке запросов. Таким образом Mongoose пропускает шаг создания полного экземпляра модели, и вы напрямую получаете doc вы можете изменить:

 MyModel.findOne().lean().exec(function(err, doc) { doc.addedProperty = 'foobar'; res.json(doc); }); 

быстрый способ, если свойство не находится в модели:

document.set( key,value, { strict: false });

Лучшим способом решения этой проблемы является использование doc.toObject() как это

 doc.toObject({ getters: true }) 

другие варианты:

  • getters: применять все геттеры (путь и виртуальные геттеры)
  • virtuals: применять виртуальные getters (может переопределить getters)
  • minimize: удалить пустые объекты (по умолчанию – true)
  • transform: функция преобразования для применения к результирующему документу перед возвратом
  • depopulate: depopulate любые заполненные пути, заменяя их исходными refs (по умолчанию – false)
  • versionKey: включить ли ключ версии (по умолчанию – true)

так, например, вы можете сказать

 Model.findOne().exec((err, doc) => { if (!err) { doc.toObject({ getters: true }) console.log('doc _id:', doc._id) } }) 

и теперь это сработает.

Для справки см.: http://mongoosejs.com/docs/api.html#document_Document-toObject

  • Как создать глобальные переменные, доступные во всех представлениях, используя Express / Node.JS?
  • Примеры использования RedisStore в socket.io
  • Как передать аргументы командной строки программе Node.js?
  • connect ECONNREFUSED - узел js, sql
  • Как установить cookie в узле js с помощью express-frameworks?
  • Использование spawn nodejs вызывает ошибки «unknown option -» и «»
  • Ошибка: невозможно проверить первый сертификат в nodejs
  • передать JSON в HTTP POST Request
  • Ищете способ скопировать файлы в gulp и переименовать на основе родительского каталога
  • Как использовать socket.io в express-маршрутах?
  • Ошибка Node.JS: ENOSPC
  • Interesting Posts

    DD-WRT: не удается увидеть клиента при использовании проводной сети

    Swift 2 – UnsafeMutablePointer для объекта

    Встроенные стили и classы

    Не удалось добавить окно [email protected] – разрешено разрешение для этого типа windows

    Есть ли способ сделать n-уровневые вложенные циклы в Java?

    Местоположение Google Chrome

    Как вручную запускать HTTP-запросы POST с помощью Firefox или Chrome?

    Настройка разрешений VSFTPD с сервера Apache

    Почему C ++ разрешает целое число присваивать строке?

    Разница между + и & для присоединения строк в VB.NET

    Как я могу просмотреть MSIL / CIL, сгенерированный компилятором C #? Почему это называется сборкой?

    Какую утилиту для измельчения можно использовать?

    Может ли кто-нибудь привести пример сходства косинусов, очень простым, графическим способом?

    является f (void), устаревшим в современных C и C ++

    Разрешения Unix-разрешения с пользователями, принадлежащими к той же группе, которые получают доступ к папке

    Давайте будем гением компьютера.