尚未为模型“ModuleSchema”注册架构

问题描述 投票:0回答:1

我正在尝试弄清楚如何在 NestJs 中注册模型,因为我总是收到错误消息:

Use mongoose.model(name, schema) {"0":"MissingSchemaError: Schema hasn't been registered for model \"ModuleSchema\".\nUse mongoose.model(name, schema)\n    at NativeConnection.Connection.model (F:\\Code\\thorberg\\divo-backend\\node_modules\\mongoose\\lib\\connection.js:1132:11)\n`

我的目标是使用 mongoose populate 方法将引用的文档加入到其他集合中。

import { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { Model } from 'mongoose';
import { CreateModuleDto } from './dto/create-module.dto';
import { UpdateModuleDto } from './dto/update-module.dto';
import { Module, ModuleDocument } from './module.model';

@Injectable()
export class ModuleService {
  constructor(@InjectModel(Module.name) private moduleModule: Model<ModuleDocument>) { }


  findAll() {
    return this.moduleModule.find().populate('modules');
  }
}

我这样尝试过,确实有效。但不要认为这是最佳实践:

 findAll() {
    return this.moduleModule.find().populate('modules', ['name', 'isChecked'], this.moduleModule);
  }

有没有办法在 module.module.ts 中的某个地方注册该模型?

import { Module } from '@nestjs/common';
import { MongooseModule } from '@nestjs/mongoose';
import { ModuleController } from './module.controller';
import { Module as M, ModuleSchema } from './module.model';
import { ModuleService } from './module.service';


@Module({
  imports: [MongooseModule.forFeature([{ name: M.name, schema: ModuleSchema }])],
  controllers: [ModuleController],
  providers: [ModuleService],
  exports: [ModuleService]
})
export class ModuleModule { }

mongoose nestjs mongoose-schema mongoose-populate nestjs-mongoose
1个回答
0
投票

出现这个错误主要有两个原因

  1. 可能忘记在模块中导入模型和模式
  2. 可能忘记添加或更改模式中的引用值, 例子
  @Prop({ type: mongoose.Schema.Types.ObjectId, ref: "Module" })
  modules: mongoose.ObjectId;

这里的ref必须是类名,即

@Schema({
  collection: "modules",
})
export class Module  {}
该模型的

classname。 请检查

© www.soinside.com 2019 - 2024. All rights reserved.