首页 > 解决方案 > Nodejs 扩展运算符在返回的对象中返回一些意外的键

问题描述

我有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)

标签: node.jsexpress

解决方案


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

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

Schema.findOne(query).lean()

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

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

推荐阅读