You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mongoose新增产品到MongoDB报color必填错误如何解决?

问题原因
  • 核心错误是product_type的Schema定义不符合Mongoose的数组规则:你当前写的product_type: [ {color: 配置}, {size: 配置} ]会被Mongoose识别为「数组内所有元素必须同时满足这两个对象的校验规则」,也就是每一个数组元素都必须同时包含必填的color和size字段。你传入的数组第二个元素只有size没有color,因此触发了必填校验报错。
  • 附加问题1:size字段的类型和枚举值不匹配:你给size设置的type是Number,但enum枚举值写的是字符串类型的'40'、'41'、'42',后续即使解决结构问题也会触发类型校验失败。
  • 附加问题2:测试数据中size赋值为数组[41,42],但你当前Schema定义的size是单个Number类型,也会触发校验错误。
  • 额外注意:你Schema中price的type是String,但测试数据传的是数字150,后续也会出现类型不匹配的问题。
修复方案

根据你实际的业务需求,可选择以下两种方案之一:

方案1:商品规格为SKU形式(每个规格同时对应颜色+尺寸,电商常规用法)

修改product_type的Schema定义,将color和size放在同一个子对象内:

const productSchema = new Schema({
    // 其他字段保持不变
    product_type: [
        {
            color: {
                type: String,
                required: true,
            },
            size: {
                type: Number,
                required: true,
                enum: [40, 41, 42] // 枚举值改为和type匹配的数字类型
            }
        }
    ]
})

对应修改测试数据的product_type字段:

const p = new Product({
    // 其他字段保持不变,price改为字符串'150'或者将Schema的price改为Number类型
    price: '150',
    product_type: [
        { color: 'red', size: 41 },
        { color: 'red', size: 42 }
    ]
})

方案2:单独存储所有可选颜色、所有可选尺寸

如果不需要关联颜色和尺寸,只需要分别存可选值,就把product_type改为对象类型,不要用数组:

const productSchema = new Schema({
    // 其他字段保持不变
    product_type: {
        color: [{
            type: String,
            required: true
        }],
        size: [{
            type: Number,
            required: true,
            enum: [40, 41, 42]
        }]
    }
})

对应修改测试数据的product_type字段:

const p = new Product({
    // 其他字段保持不变,price改为字符串'150'或者将Schema的price改为Number类型
    price: '150',
    product_type: {
        color: ['red'],
        size: [41, 42]
    }
})

内容的提问来源于stack exchange,提问作者Hadi Zouhbi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 16:54:04