【发布时间】:2018-06-09 09:59:38
【问题描述】:
我正在使用 mongo DB 和 mongoose 开发一个 express js API。
我想在 Javascript es6 中创建一个由少量变量和猫鼬请求的结果组成的对象,并希望使用 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,
...
}
}
我有点理解对象结果由 mongoose 丰富以允许与它进行特定交互,但是当我在执行此操作之前 console.log 时,它描绘了一个没有所有这些东西的简单对象。
我不想通过 ...result._doc 来作弊,因为我抽象了这部分,它不适合这种方式。也许有一种方法可以复制没有丰富内容的对象。
感谢您的宝贵时间。
【问题讨论】:
-
看看它的
toString方法。这就是您在 console.log 中看到的内容 -
对结果执行
toString会返回仅包含我的字段的简单对象,因此看起来该对象是正常的,但是当我尝试使用扩展运算符时,它会更改对象结构。它与Object.assign()完全相同。 -
是的,然后
console.log( result.toString )看看它是如何工作的......
标签: javascript mongoose ecmascript-6