我正在用mongo和mongoose开发一个快捷的js。
我想在Javascript es6中创建一个对象,该对象由几个变量和一个猫鼬请求的结果组成,并希望使用es6扩展操作符:
MyModel.findOne({_id: id}, (error, result) => {
if (!error) {
const newObject = {...result, toto: "toto"};
}
});问题是,将扩展运算符应用于结果以一种广泛的方式对其进行转换:
newObject: {
$__: {
$options: true,
activePaths: {...},
emitter: {...},
getters: {...},
...
_id: "edh5684dezd..."
}
$init: true,
isNew: false,
toto: "toto",
_doc: {
_id: "edh5684dezd...",
oneFieldOfMyModel: "tata",
anotherFieldOfMyModel: 42,
...
}
}我有点理解,对象结果被猫鼬所丰富,以允许与它进行特定的交互,但是在这样做之前,当我console.log时,它描述的是一个简单的对象,而不是所有这些东西。
我不想通过做...result._doc来作弊,因为我抽象了这个部分,而且它不适合这样做。也许有一种方法可以复制一个对象,而不需要任何东西。
谢谢您抽时间见我。
发布于 2017-12-28 21:26:51
您可以使用Mongoose Document.toObject()方法。它将返回从数据库中获取的底层纯JavaScript对象。
const newObject = {...result.toObject(), toto: "toto"};您可以阅读有关.toObject()方法这里的更多信息。
发布于 2022-01-12 10:08:16
对某些人来说,这是有帮助的:
const newObject = {
...JSON.parse(JSON.stringify(result)),
toto: "toto"
};但是,如果在架构中使用日期、函数、未定义的、regExp或无穷大,则会受到限制
发布于 2022-02-14 12:23:33
我遇到了同样的问题,除了前面的答案之外,我还找到了一些替代方案。
选项1 Object.assign()
The Object.assign() method copies all enumerable own properties from one or more source objects to a target object. It returns the modified target object.
示例:
Object.assign(result, {toto: "toto");Sets the value of a path, or many paths.
doc.set("toto", "toto")https://stackoverflow.com/questions/48014504
复制相似问题