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

求助:Node.js中Mongoose数组字段插入对象触发CastError

解决Mongoose向数组插入对象时的CastError问题

问题原因

错误提示Cast to string failed for value (type Object) at path "videos",说明Mongoose判定videos字段为字符串类型,但你尝试插入的是对象,类型不匹配。核心原因大概率是以下两种:

  • 集合中存在历史文档,videos字段被错误存储为字符串类型;
  • Mongoose复用了之前错误定义的模型缓存(比如曾把videos设为String类型,缓存未清除)。

解决方案

1. 修复MongoDB已有文档的字段类型

登录MongoDB Atlas或使用Mongo Shell,执行以下命令,批量将所有videos为字符串类型的文档修正为空数组:

db.contents.updateMany(
  { videos: { $type: "string" } },
  { $set: { videos: [] } }
)

2. 确保Mongoose模型加载正确

避免复用旧的错误模型缓存,修改模型定义代码,将子数组结构单独定义为Schema,让类型更明确:

import mongoose, { Schema } from "mongoose";

// 清除已存在的旧模型缓存
if (mongoose.models.Content) {
  mongoose.deleteModel('Content');
}

// 单独定义子结构Schema
const videoSchema = new Schema({
  title: String,
  url: String,
  type: String,
  thumbnail: String,
  status: String,
});

const noteSchema = new Schema({
  title: String,
  url: String,
  type: String,
});

const materialSchema = new Schema({
  title: String,
  url: String,
  type: String,
});

const contentSchema = new Schema(
  {
    chapter_id: String,
    videos: [videoSchema],
    notes: [noteSchema],
    materials: [materialSchema],
  },
  {
    timestamps: true,
  }
);

const Content = mongoose.model("Content", contentSchema);

export default Content;

3. 重启服务器

修改模型定义后,必须重启Node.js服务器,确保Mongoose加载新的Schema配置。

验证

完成以上步骤后,重新发送ThunderClient请求,即可正常向videos数组插入对象,不再触发CastError。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 03:35:31