MongoDB Populate报错MissingSchemaError:模型未注册求助
MongoDB Populate关联查询报错MissingSchemaError排查
问题描述
执行populate关联查询时持续报错:
MissingSchemaError: Schema hasn't been registered for model cant find resolve
查询代码:
const trade = Trade.find({ useradmin: idUser }).populate('type')
Trade模型代码:
import mongoose from "mongoose" export interface iTrade extends mongoose.Document{ useradmin : string, type : string, status : boolean } const TradeSchema = new mongoose.Schema({ useradmin:{ type: String, required: [true, 'usuario requerido'] }, type:{ type: mongoose.Types.ObjectId, ref: "TradeType" }, status:{ type: Boolean, required:false, default: true, } }, { collection: 'trade', timestamps: true, versionKey: 'version' }) TradeSchema.methods.toJSON = function () { const {__v,version, ... data } = this.toObject(); return data; } const Trade = mongoose.model<iTrade>("trade", TradeSchema) export default Trade
TradeType模型代码:
import mongoose from "mongoose" export interface iTradeType extends mongoose.Document{ name : string } const TradeTypeSchema = new mongoose.Schema({ name: { type: String } }, { collection: 'tradeType', timestamps: true, versionKey: 'version' }) TradeTypeSchema.methods.toJSON = function () { const {__v,version, ... data } = this.toObject(); return data; } const TradeType = mongoose.model<iTradeType>("TradeType", TradeTypeSchema) export default TradeType
尝试修改模型名称后报错依旧,求助解决思路。
解决方法
1. 确保模型加载顺序正确
Mongoose执行populate时需要目标模型已经完成注册。如果代码中先加载Trade模型、后加载TradeType模型,会导致Mongoose找不到TradeType对应的Schema。
解决方式:
- 在执行查询的文件中,先导入TradeType模型,再导入Trade模型:
import TradeType from './path/to/TradeType'; import Trade from './path/to/Trade';
- 或者在应用启动阶段,先批量加载所有模型,再初始化路由/业务逻辑。
2. 修正类型定义(可选但推荐)
Trade接口中type字段定义为string,但Schema里实际是mongoose.Types.ObjectId(populate后会变成TradeType文档对象),类型定义不一致可能导致TS提示错误,建议修正:
export interface iTrade extends mongoose.Document{ useradmin : string, type : mongoose.Types.ObjectId | iTradeType, status : boolean }
3. 验证模型注册状态
检查TradeType模型的文件是否被正确导入到应用中,没有遗漏加载。比如在Express项目中,确保连接数据库后,所有模型文件都被require/import过。
内容的提问来源于stack exchange,提问作者Carlos Marin
相关产品推荐
相关产品推荐

