es6传播运营商 - 猫鼬结果副本

Luc*_*uze 13 javascript mongoose ecmascript-6

我正在用mongo DB和mongoose开发一个快速的js API.

我想在Javascript es6中创建一个由少量变量组成的对象和一个mongoose请求的结果,并希望用es6扩展运算符来实现:

MyModel.findOne({_id: id}, (error, result) => {
   if (!error) {
      const newObject = {...result, toto: "toto"};
   }
});
Run Code Online (Sandbox Code Playgroud)

问题是应用扩展运算符导致结果以一种奇怪的方式转换它:

newObject: {
   $__: {
      $options: true,
      activePaths: {...},
      emitter: {...},
      getters: {...},
      ...
      _id: "edh5684dezd..."
   }
   $init: true,
   isNew: false,
   toto: "toto",
   _doc: {
      _id: "edh5684dezd...",
      oneFieldOfMyModel: "tata",
      anotherFieldOfMyModel: 42,
      ...
   }
}
Run Code Online (Sandbox Code Playgroud)

我有点明白,对象结果是由mongoose丰富的,以允许与它进行特定的交互,但是当我在控制它之前,它会描述一个没有所有这些东西的简单对象.

我不想通过做... result._doc作弊因为我抽象这部分并且它不适合那种方式.也许有一种方法可以复制没有丰富内容的对象.

感谢您的时间.

Tsv*_*nev 32

您可以使用Mongoose Document.toObject()方法.它将返回从数据库中获取的基础纯JavaScript对象.

const newObject = {...result.toObject(), toto: "toto"};
Run Code Online (Sandbox Code Playgroud)

您可以在此处详细了解该.toObject()方法.

  • 您还可以直接在数据库查询上使用 `.lean`,在[此处]阅读更多信息(https://mongoosejs.com/docs/tutorials/lean.html) (3认同)