我有一个名为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
方法,行为完全相同.
Mongoose文档(模型实例)很特殊:它们只打印模式中存在的属性.
如果没有在那里定义属性,那么它们就不会出现console.log()
(如果你将文档转换为普通的JS对象,也不会出现obj.toObject()
).
这意味着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') });