我正在使用mongo DB和mongoose开发一个express js API。
我想要创建一个由几个变量和mongoose请求结果组成的Javascript es6对象,并希望使用es6 spread操作符进行操作:
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
方法。这就是你在控制台中看到的内容。 - Jonas WilmstoString
方法会返回只包含我的字段的简单对象,因此看起来对象是正常的,但当我尝试使用扩展运算符时,它会改变对象结构。使用Object.assign()
也会产生完全相同的结果。 - Lucien Perouzeconsole.log( result.toString )
来查看它是如何工作的... - Jonas Wilms