Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript es6排列运算符-mongoose结果副本_Javascript_Mongoose_Ecmascript 6 - Fatal编程技术网

Javascript es6排列运算符-mongoose结果副本

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"}; } }); 问题在于,将扩展运算符应用于

我正在用mongodb和mongoose开发一个expressjsapi

我想在Javascript es6中创建一个对象,该对象由几个变量和mongoose请求的结果组成,并希望使用es6 spread运算符:

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()。这里还有其他选择吗?