我有一个名为bookings的对象,在其中我有几个属性,我想用Object.assign进行扩展,如下所示:
let data = Object.assign(booking, {
hiw: event.hiw[booking.locale],
tip: event.tip[booking.locale],
start: moment(event.start).format('L')
});
但是当我打印数据时,结果将是源(预订)中的相同对象,因此hiw
,tip
和start
将被忽略,但是......如果我试着这样做:
let data = Object.assign({}, {
hiw: event.hiw[booking.locale],
tip: event.tip[booking.locale],
start: moment(event.start).format('L')
});
这将是完美的。
我的问题是:我在这里做错了什么?为什么我不能扩展booking
而我可以扩展空对象?
对于异步代码来说,这绝对不是问题,当我尝试延长预订时,他已经存在所有属性。
我也尝试使用下划线extend
方法,行为完全相同。
答案 0 :(得分:8)
Mongoose文档(模型实例)很特殊:它们只会打印模式中存在的属性。
如果没有在那里定义属性,那么当你console.log()
它们时它们就不会出现(如果你将文档转换为带有obj.toObject()
的普通JS对象,它也不会出现)
这意味着只有在分配了架构中也存在的属性时才使用Object.assign()
。任何未声明的属性都不会显示(也不会保存到数据库中)。
如果您打算将文档用于输出,则应在分配之前将其转换为正确的JS对象:
let data = Object.assign(booking.toObject(), {
hiw : event.hiw[booking.locale],
tip : event.tip[booking.locale],
start : moment(event.start).format('L')
});