本文详解如何在 typescript + mongodb(mongoose/nestjs)项目中,将嵌套在对象数组中的 iso 格式日期字符串(如 `’2023-07-02t13:21:29.643z’`)安全、高效地批量转换为 `date` 实例数组,确保数据符合 schema 类型定义并正确持久化。
在实际开发中(尤其是使用 NestJS + Mongoose 的医疗健康类应用),常需将前端传入的 ISO 8601 字符串格式日期(如 testDates: [‘2023-07-02T13:21:29.643Z’, …])转换为真正的 Date 对象,以匹配后端 Schema 中声明的 testDates: [Date] 类型。若直接传递字符串数组,Mongoose 将按字符串存储,导致类型不一致、查询失效(如 $gte 无法生效)、序列化异常等问题。
✅ 正确做法是:在调用 create() 前,对 medicalData 数组进行深层映射(deep map),逐层解构并转换 testDates 字符串数组为 Date[]。推荐使用函数式、不可变方式处理,避免副作用:
// medical.service.ts
const convertedMedicalData = medicalData.map(({ testDates, ...rest }) => ({
...rest,
testDates: testDates.map(dateStr => new Date(dateStr)),
}));
const result = await this.medicalRecordRepository.create({
medicalData: convertedMedicalData,
});
该写法利用了: