Javascript es6排列运算符-mongoose结果副本
我正在用mongodb和mongoose开发一个expressjsapi 我想在Javascript es6中创建一个对象,该对象由几个变量和mongoose请求的结果组成,并希望使用es6 spread运算符:Javascript es6排列运算符-mongoose结果副本,javascript,mongoose,ecmascript-6,Javascript,Mongoose,Ecmascript 6,我正在用mongodb和mongoose开发一个expressjsapi 我想在Javascript es6中创建一个对象,该对象由几个变量和mongoose请求的结果组成,并希望使用es6 spread运算符: MyModel.findOne({_id: id}, (error, result) => { if (!error) { const newObject = {...result, toto: "toto"}; } }); 问题在于,将扩展运算符应用于
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,
...
}
}
我有点理解,mongoose丰富了对象结果,允许与它进行特定的交互,但当我在这样做之前console.log时,它描述了一个没有所有这些东西的简单对象
我不想通过做…result.\u doc来作弊,因为我抽象了这个部分,它不适合那样做。也许有一种方法可以复制一个对象而不需要任何东西
谢谢您的时间。您可以使用Mongoose
Document.toObject()
方法。它将返回从数据库获取的底层普通JavaScript对象
const newObject = {...result.toObject(), toto: "toto"};
您可以阅读有关
.toObject()
方法的更多信息。看看它的toString
方法。这就是您在console.log内部看到的情况,在结果上执行toString
,返回的是仅包含我的字段的简单对象,因此看起来该对象是正常的,但当我尝试使用扩展运算符时,它会更改对象结构。它与Object.assign()
的功能完全相同。是的,那么请执行console.log(result.toString)
来看看它是如何工作的……好的,很简单,这正是我想要的,但没有找到:)谢谢,希望它能帮助更多的人。谢谢,我有一个跟进,执行此操作后,我无法使用newObject.toJSON(),我本可以在前面使用它作为result.toJSON()。这里还有其他选择吗?