当前位置: 首页 > 知识库问答 >
问题:

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

呼延化
2023-03-14

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

我想在Javascript es6中创建一个对象,该对象由几个变量和猫鼬请求的结果组成,并希望使用es6扩展运算符这样做:

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

问题在于应用扩展运算符以wierd方式对其进行结果变换:

newObject: {
   $__: {
      $options: true,
      activePaths: {...},
      emitter: {...},
      getters: {...},
      ...
      _id: "edh5684dezd..."
   }
   $init: true,
   isNew: false,
   toto: "toto",
   _doc: {
      _id: "edh5684dezd...",
      oneFieldOfMyModel: "tata",
      anotherFieldOfMyModel: 42,
      ...
   }
}

我有点理解对象结果被猫鼬丰富,以允许与它进行特定的交互,但是当我在这样做之前console.log时,它描绘了一个没有所有这些东西的简单对象。

我不想做欺骗的事。。。结果_博士,因为我抽象了这个部分,它不适合那样。也许有一种方法可以复制一个对象而不需要任何东西。

谢谢你抽出时间。

共有2个答案

单品
2023-03-14

对于某些人来说,这可能是有帮助的:

const newObject = {
    ...JSON.parse(JSON.stringify(result)),
    toto: "toto"
};

但如果在模式中使用日期、函数、未定义、regExp或无穷大,则会有一些限制

贺栋
2023-03-14

可以使用MongooseDocument.toObject()方法。它将返回从数据库中获取的底层纯JavaScript对象。

const newObject = {...result.toObject(), toto: "toto"};

您可以阅读有关的更多信息。toObject()方法。

 类似资料:
  • 我对下面这段代码有一个问题: 结果输出让我大吃一惊: 我已经在线检查了Javadoc中的构造函数,没有任何帮助。

  • 主要内容:1.运算符类型可以将操作符定义为告诉系统实施特定操作的符号。 在JavaScript中,有很多运算符,通过使用特定的运算符,可以执行任何特定的任务。运算符在表达式中用于评估不同的操作数。 表达式是一种返回值的语句,表达式包括: 运算符:它负责对操作数执行一些运算。 操作数:它代表数据。 例如:假设像这样的表达式。 在此表达式中,和是操作数,星号()符号是乘法运算符。 1.运算符类型 JavaScript中的运算

  • 主要内容:1.散布运算符和数组操作,2.散布运算符和字符串ES6引入了一个称为散布运算符的新运算符,它由三个点()组成。 它允许迭代器在期望参数超过零的地方扩展。 它赋予从数组中获取参数的特权。 传播()运算符的语法与参数相似,但是完全相反。 让我们了解一下散布运算符的语法。 语法 上面语法中的三个点()是散布运算符,其目标是特定变量中的整个值。 让我们尝试了解散布运算符在不同情况下的用法: 1.散布运算符和数组操作 下面来看看如何使用散布运算符来操纵数

  • 问题内容: 我对条件运算符有些疑惑。考虑以下两行: 为什么f1变为null且第二条语句引发NullPointerException? Langspec-3.0第15.25段说: 否则,第二和第三操作数分别为S1和S2类型。令T1为对S1进行装箱转换所产生的类型,而T2为对S2进行装箱转换所产生的类型。条件表达式的类型是将捕获转换(§5.1.10)应用于lub(T1,T2)(§15.12.2.7)的

  • 我对条件运算符有点困惑。请考虑以下两行: 为什么f1变成null,而第二条语句抛出NullPointerException? LANSPEC-3.0第15.25段SAIS: 否则,第二和第三操作数的类型分别为S1和S2。设T1是对S1应用装箱转换得到的类型,设T2是对S2应用装箱转换得到的类型。条件表达式的类型是将捕获转换(§5.1.10)应用于lub(T1,T2)(§15.12.2.7)的结果。

  • 问题内容: 这是我的数据库的快照。 col1和col2都声明为int。 我的ComputedColumn当前添加列1和2,如下所示… 取而代之的是,我的ComputedColumn应该将列1和2(在中间包含 ’-‘ 字符)连接起来,如下所示… 那么,正确的语法是什么? 问题答案: 您可能将计算列定义为。试试吧。 或者,如果您愿意,可以替换为或选择其他长度。