【问题标题】:Nodejs spread operator return some unexpected keys in returned object [duplicate]Nodejs扩展运算符在返回的对象中返回一些意外的键[重复]
【发布时间】:2020-11-15 23:30:37
【问题描述】:

我有res 是原始对象

{
  time: 2020-07-26T10:39:38.135Z,
  isTransfered: true,
  _id: 5f1d5d6b60755e75b48770a6,
  receiverAccountNumber: '12345678',
  transfererAccountNumber: '11111111',
  receiverName: 'Lê Công Tuyền',
  transfererName: 'Nguyễn Thanh Tuấn',
  amount: 1000000,
  content: "test chuyefo'seajfg",
  payFeeBy: 'transferer',
  type: { name: 'internal', bankCode: 'TUB' },
  __v: 0
}

我得到这个结果(称为 res2)是使用扩展运算符 res2 = {...res} 返回的对象:

{
  '$__': InternalCache {
    strictMode: true,
    selected: {},
    // alot of key-value
    '$setCalled': Set(0) {},
    ownerDocument: undefined,
    fullPath: undefined,
    emitter: EventEmitter {
      _events: [Object: null prototype],
      _eventsCount: 2,
      _maxListeners: 0,
      [Symbol(kCapture)]: false
    },
    '$options': { skipId: true, isNew: false, willInit: true }
  },
  isNew: false,
  errors: undefined,
  _doc: {
    time: 2020-07-26T10:39:38.135Z,
    isTransfered: true,
    _id: 5f1d5d6b60755e75b48770a6,
    receiverAccountNumber: '12345678',
    transfererAccountNumber: '11111111',
    receiverName: 'Lê Công Tuyền',
    transfererName: 'Nguyễn Thanh Tuấn',
    amount: 1000000,
    content: "test chuyefo'seajfg",
    payFeeBy: 'transferer',
    type: { name: 'internal', bankCode: 'TUB' },
    __v: 0
  },
  '$locals': {},
  '$op': null,
  '$init': true
}

我真的不知道传播运算符的这种行为,生成了很多新的键值和我想要获取的对象在_doc键中。

代码在 Nodejs v12(nvm 使用 12)上运行

【问题讨论】:

  • 如果你想要res._doc你不需要使用...
  • 这和Express无关,而是和mongoose有关。您的“原始对象”不是普通对象,而是 mondodb Document 实例,当您 console.log 时它呈现的内容不是对象实际包含的内容。使用.toObject()

标签: node.js express


【解决方案1】:

这可能是因为这里的res 是一个具有这些值的猫鼬文档。

默认情况下,当您执行 mongoose 查询时,它会返回一个文档对象。为了接收一个普通的对象,使用lean()。如果您使用精益,那么在使用扩展运算符时您将不会获得这些不必要的数据。

Schema.findOne(query).lean()

但是,如果您需要来自 mongoose 的文档对象,那么在这种情况下,您可以尝试以下方法来删除您不需要的其他值。

 let res2 = { ...res.toObject() };

【讨论】:

  • 是的 res 是我的猫鼬档案!
猜你喜欢
  • 1970-01-01
  • 2019-01-16
  • 1970-01-01
  • 2020-08-26
  • 2020-05-08
  • 2017-12-03
  • 2021-12-29
  • 2019-09-04
相关资源
最近更新 更多