У меня есть документ от мангуста, который я хочу расширить до кодирования JSON и отправки в ответ. Если я пытаюсь добавить свойства в документ, он игнорируется. Свойства не отображаются в Object.getOwnPropertyNames(doc)
нормальном расширении невозможно. Странно то, что JSON.parse(JSON.encode(doc))
работает и возвращает объект со всеми правильными свойствами. Есть лучший способ сделать это?
200
Model.find({})
в документах, возвращаемый массив. Вы можете docs.toObject?var docArray = modelArray.map(function(model) { return model.toObject(); });
Еще один способ сделать это - сообщить Mongoose, что все, что вам нужно, - это простая версия JavaScript возвращаемого документа с помощью
lean()
цепочки запросов. Таким образом, Mongoose пропускает этап создания экземпляра полной модели, и вы сразу получаете,doc
что можете изменить:источник
lean
как правило, более производительно, потому что вы пропускаете накладные расходы на первое создание полного документа Mongoose.lean()
запроса устанавливает опцию до того, как запрос будет фактически выполнен (exec
), чтобы результаты были непосредственно в их «худой» форме. Посмотрите этот вопрос, чтобы узнать о положительном влиянии на производительностьlean
.быстрый способ, если свойство не в модели:
document.set( key,value, { strict: false });
источник
Лучший способ решения такой проблемы - использовать
doc.toObject()
вот такдругие варианты включают в себя:
getters:
применить все методы получения (пути и виртуальные методы получения)virtuals:
применять виртуальные геттеры (можно переопределить опцию геттеров)minimize:
удалить пустые объекты (по умолчанию true)transform:
функция преобразования, применяемая к полученному документу перед возвратомdepopulate:
удалить все заполненные пути, заменив их исходными ссылками (по умолчанию false)versionKey:
включать ли ключ версии (по умолчанию true)так, например, вы можете сказать,
и теперь это будет работать.
Для справки см .: http://mongoosejs.com/docs/api.html#document_Document-toObject
источник
Чтобы получить простой объект из документа Mongoose, я использовал
_doc
свойство следующим образомЯ пытался,
toObject
но это дало мне функции, аргументы и все остальное, что мне не нужно.источник
_
самого начала - не идеальное решение. Использование постного может решить ваш случай._doc
собственность много раз, не сталкиваясь ни с какой проблемой. И использованиеlean
метода дает вам простой объект, на котором вы не можете выполнять операции модели мангуста.Вы также можете привести в порядок объект, а затем снова проанализировать, чтобы сделать нормальный объект. Например, как: -
источник