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

从外部JSON加载默认数据存入MongoDB时Mongoose验证失败如何解决?

问题原因

你遇到的校验报错是以下几个原因共同导致的:

  • 你读取的test_data.json的根结构是数组,JSON.parse返回的是包含数据对象的数组,而非单个数据对象,直接传入模型构造函数会导致Mongoose无法识别到datetime、sensor、value三个必填字段
  • 你使用的日期格式dd/mm/yyyy HH:MM无法被Mongoose默认的Date类型直接解析,会生成无效日期导致校验失败
  • 创建Mongoose实例未加new关键字,且异步的save()操作没有捕获错误,会触发未处理Promise拒绝警告

解决方法

你可以参考如下代码修改数据库连接后的逻辑:

mongoose.connect("mongodb://127.0.0.1:27017/",{
        useCreateIndex:true,
        useNewUrlParser: true,
        useUnifiedTopology: true}
).then(async () => {
    console.log('Database Successfully Connected')
    if(fill_default_data) {
      // 读取并解析JSON数据
      const rawData = JSON.parse(fs.readFileSync(path.resolve(__dirname, 'test_data.json'), 'utf8'));
      // 处理每一项的日期格式,适配Mongoose的Date类型
      const formattedData = rawData.map(item => {
        const [dateStr, timeStr] = item.datetime.split(' ');
        const [day, month, year] = dateStr.split('/');
        const [hour, minute] = timeStr.split(':');
        return {
          // 月份要减1,因为JS Date的月份从0开始计数
          datetime: new Date(year, month - 1, day, hour, minute),
          sensor: item.sensor,
          value: item.value
        }
      })
      // 批量插入数据,捕获错误
      await DataEntry.insertMany(formattedData).catch(err => {
        console.log('测试数据插入失败', err)
      })
      console.log('测试数据插入完成')
    }
  }, error => {
    console.log('数据库连接失败', error)
  }
);

如果你的SensorSchema的字段定义和JSON里的sensor字段结构不一致,还需要同步调整SensorSchema的字段名或者转换JSON里的sensor字段结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:45:00