Mongoose数组类型Schema创建失败,保存时触发ValidationError
解决Mongoose存储ObjectId数组的验证错误
你的问题出在students字段的Schema定义上——你把它写成了二维数组类型,但实际插入的是一维ObjectId字符串数组,导致类型转换失败。
看你原来的Schema代码:
students: [{ type: [mongoose.Schema.Types.ObjectId], ref: "student", }],
这里的[{ type: [ObjectId] }]意味着students是一个数组,数组里的每一项又是一个ObjectId数组(也就是二维数组),但你插入的["6451fe33cb3ca7242f39d2e7", "6451fe15cb3ca7242f39d2e2"]是一维数组,完全不符合定义,所以触发了ValidationError。
修正方案
把students定义为一维ObjectId数组,两种写法都可行:
写法一(保留关联引用)
students: [{ type: mongoose.Schema.Types.ObjectId, ref: "student", }],
写法二(简洁版)
students: [mongoose.Schema.Types.ObjectId],
修正后再运行你的插入代码,验证错误就会消失。另外注意ref的值是"student",要确保对应的Model名称确实是student(Mongoose会自动将Model名转为复数集合名,但ref需要和Model定义的名称完全一致)。
内容的提问来源于stack exchange,提问作者PraxIPle
相关产品推荐
相关产品推荐

