在NestJS+Mongoose中,用 const dbItem = xxxModel.findOne({}).exec() 查找出来的结果,是一个 document 对象,就算你定义了 Scheme 实体类对象,此时的结果也不是一个真正的完整的实体类对象。
当然此时你使用 dbItem.xxx 可以获取到对应的字段属性值,没有任何问题,但是如果你想使用Object.assign(target, dbItem),你会发现target 对象(为一个DTO类,数据结构与Schema中的类的字段名、类型完全相同)根本没有赋值过去!
解决方法,使用查询结果对象 toObject() 方法转为普通对象:
const dbItem = await this.xxxModel.findOne({}).exec();
const dto = new XxxDto();
Object.assign(dto, dbItem.toObject());
console.log(dto);