Node.js Nodejs spread运算符在返回的对象中返回一些意外的键
我有Node.js Nodejs spread运算符在返回的对象中返回一些意外的键,node.js,express,Node.js,Express,我有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',
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
}
我真的不知道spread操作符的这种行为,它生成了很多新的键值,并且我想要得到的对象位于\u doc
key中
代码在nodejsv12上运行(nvmuse12)这可能是因为这里的
res
是一个具有这些值的mongoose文档
默认情况下,当您执行mongoose查询时,它将返回一个文档对象。要接收普通对象,请使用lean()
。如果您使用精益,那么在使用spread运算符时就不会得到这些不必要的数据
Schema.findOne(query).lean()
但是,如果您需要来自mongoose的document对象,那么在这种情况下,您可以尝试以下方法来删除不需要的其他值
let res2 = { ...res.toObject() };
这可能是因为这里的
res
是一个mongoose文档,它具有这些值
默认情况下,当您执行mongoose查询时,它将返回一个文档对象。要接收普通对象,请使用lean()
。如果您使用精益,那么在使用spread运算符时就不会得到这些不必要的数据
Schema.findOne(query).lean()
但是,如果您需要来自mongoose的document对象,那么在这种情况下,您可以尝试以下方法来删除不需要的其他值
let res2 = { ...res.toObject() };
如果您想要
res.\u doc
您不需要使用…
这与Express无关,而是与mongoose有关。您的“原始对象”不是普通对象,而是mondodbDocument
实例,以及当您console.log
时它呈现的内容。它不是对象实际包含的内容。使用.toObject()
。如果您想要res.\u doc
您不需要使用。
这与Express无关,而是与mongoose有关。您的“原始对象”不是普通对象,而是mondodbDocument
实例,以及当您console.log
时它呈现的内容。它不是对象实际包含的内容。使用.toObject()
。是的,res是我的猫鼬产品!是的,这是我的猫鼬蛋!