ES6 оператор распространения - копирование результата Mongoose
Я разрабатываю API на Express.js с использованием MongoDB и Mongoose.
Я пытаюсь создать объект на JavaScript (ES6), состоящий из нескольких переменных и результата запроса Mongoose, и хотел бы сделать это с помощью оператора распространения ES6:
MyModel.findOne({_id: id}, (error, result) => {
if (!error) {
const newObject = {...result, toto: "toto"};
}
});
Проблема заключается в том, что при применении оператора распространения к result
объект "превращается" в нечто странное:
newObject: {
$__: {
$options: true,
activePaths: {...},
emitter: {...},
getters: {...},
...
_id: "edh5684dezd..."
},
$init: true,
isNew: false,
toto: "toto",
_doc: {
_id: "edh5684dezd...",
oneFieldOfMyModel: "tata",
anotherFieldOfMyModel: 42,
...
}
}
Я частично понимаю, что объект result
обогащается Mongoose для обеспечения специфичных взаимодействий с ним, но когда я вывожу его в консоль до применения оператора, он выглядит как простой объект без всех этих дополнительных свойств.
Я не хотел бы "обманывать", используя ...result._doc
, поскольку этим я абстрагирую эту часть и она не подойдет таким образом. Может быть, существует способ скопировать объект без дополнительных свойств, добавленных Mongoose?
Спасибо за ваше время.
1 ответ(ов)
Для кого-то это может быть полезно:
const newObject = {
...JSON.parse(JSON.stringify(result)),
toto: "toto"
};
Однако, следует учитывать ограничения при использовании объектов Date, функций, undefined
, регулярных выражений или Infinity
в схеме. Эти типы данных не будут корректно сериализованы и могут привести к потере информации или ошибкам. Обязательно проверьте, что ваш объект не содержит такие значения, если вы планируете использовать данный способ клонирования и добавления новых свойств.
Может ли выражение (a == 1 && a == 2 && a == 3) когда-либо оцениться как истинное?
Соответствуют ли 'Стрелочные функции' и 'Функции' или они взаимозаменяемы?
Добавление тега script в React/JSX
Альтернативы переменным классов в ES6
Можно ли задать имя файла объекта PDF, отображаемого в Chrome?