Mongoose嵌套子文档存字符串数组遇ObjectExpectedError求助
解决Mongoose存储图片路径数组时的ValidationError问题
错误原因
你遇到的ValidationError核心问题是Schema定义和传入数据的结构不匹配:
- 你在
productSchema里把images字段指定为imagesSchema子文档,这个子文档的结构是一个包含images数组的对象(比如{ images: ["0.jpeg", ...] })。 - 但你在创建产品时,直接传入了纯字符串数组
product_images,Mongoose期望接收符合子文档结构的对象,而非单纯数组,因此触发了Cast to Embedded failed的类型转换错误。
解决方案
有两种方式可以解决这个问题,推荐第二种更简洁的方案:
方案1:修改传入数据的结构,匹配子文档要求
在Cars.create时,把images字段包装成符合imagesSchema的对象:
Cars.create({ // 其他产品字段 images: { images: product_images }, // 其他产品字段 })
方案2:简化Schema定义(推荐)
既然你的需求只是存储一组图片路径字符串,完全没必要嵌套子文档。直接在productSchema里定义字符串数组即可:
// 删掉单独的imagesSchema const productSchema = new Schema({ // 其他产品字段 images: [{ type: String, required: false, default: '' }], // 其他产品字段 },{ timestamps: true, usePushEach: true });
修改后,你原来路由里images: product_images的写法就能正常工作,无需调整其他代码。
内容的提问来源于stack exchange,提问作者user14398375
相关产品推荐
相关产品推荐

