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

已提供必填值但Mongoose未识别,如何修复验证错误?

解决Mongoose ValidatorError: Path properties.chargeBoxIdentity is required的问题

嘿,我一眼就看出问题所在啦——你在创建Heartbeat实例的时候,把chargeBoxIdentity直接放在了根对象里,但你的Schema里这个字段是嵌套在properties对象下面的!

问题根源

你的Schema定义明确了chargeBoxIdentity是properties的子字段:

const HeartbeatSchema = mongoose.Schema({ 
  properties: { 
    time : { type : Date, default: Date.now }, 
    chargeBoxIdentity : { type: Number, required: true} 
  }, 
  additionalProperties: false 
})

但你创建实例的时候却是这么写的:

const HB = new HeartbeatModel({ chargeBoxIdentity: 12345 });

这就导致Mongoose找不到properties.chargeBoxIdentity这个必填字段,自然抛出验证错误了。

修复方法

你需要把chargeBoxIdentity放在properties对象里,和Schema的结构完全对应上:

const HB = new HeartbeatModel({ 
  properties: {
    chargeBoxIdentity: 12345 
  }
});
HB.save()
.then(result => {console.log(result)})
.catch(err => console.log(err));

这样Mongoose就能正确识别到必填字段,验证通过后就能正常保存文档了。

另外,如果你希望简化代码、有时候可以省略properties的包裹,也可以考虑调整Schema结构,把chargeBoxIdentity提到根层级,但这得看你的业务需求是否允许。不过从你当前的Schema设计来看,保持结构一致才是最直接的解决方案。

内容的提问来源于stack exchange,提问作者Henry Griffiths

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:26:34