使用Mongoose定义嵌套对象时出错,请求技术协助
Mongoose嵌套对象Schema定义错误解决方法
你当前的问题核心是在嵌套Schema时错误传入了Mongoose模型(Model)而非Schema对象,同时代码里存在字段验证规则的拼写错误,以下是修正后的完整代码:
1. 修正用户模型文件(model.UserModel.js)
需要同时导出Schema和Model,供其他Schema嵌套使用:
const mongoose = require("mongoose") const RegisterSchema = mongoose.Schema({ _id: { type: Number, required: true }, email: { type: String, required: true }, password: { type: String, required: true }, username: String, phone: Number, role: String, active: Boolean }) const RegisterModel = mongoose.model("register", RegisterSchema) // 同时导出Schema和Model module.exports = { RegisterModel, RegisterSchema }
2. 修正点赞模型文件(models.like.js)
导入用户Schema而非Model,修正require拼写错误为required:
const mongoose = require("mongoose") // 导入用户Schema const { RegisterSchema } = require("../models/model.UserModel") const likeSchema = mongoose.Schema({ _id: { type: Number, required: true // 修正拼写错误 }, noOfLikes: { type: Number, }, // 使用用户Schema作为嵌套类型 likeduser: RegisterSchema }) const LikesModel = mongoose.model("Like", likeSchema) // 同时导出Schema和Model module.exports = { LikesModel, likeSchema }
3. 修正电影模型文件(models.movies.js)
导入点赞Schema而非Model,修正require拼写错误:
const mongoose = require("mongoose") // 导入点赞Schema const { likeSchema } = require("./models.like") const moviesSchema = mongoose.Schema({ _id: { type: Number, required: true // 修正拼写错误 }, movieName: String, movieUrl: String, moviePosterUrl: String, movieCast: [String], // 使用点赞Schema的数组作为嵌套类型 like: [likeSchema] }) const MovieModel = mongoose.model("Movie", moviesSchema) module.exports = MovieModel
关键说明
- Mongoose的Schema字段类型仅支持内置类型(String/Number等)、Schema对象、或它们的数组,不能直接传入
mongoose.model()编译后的模型实例。 - 原代码中
require:true是拼写错误,正确的验证规则是required:true,这也会导致Mongoose抛出验证错误。
内容的提问来源于stack exchange,提问作者Ironman
相关产品推荐
相关产品推荐

