mongoose NestJS TypeORM MongoDB无法使用find或FindOne来搜索资料档案库

7tofc5zh  于 2022-11-13  发布在  Go
关注(0)|答案(2)|浏览(217)

我正在用NestJs和TypeORM以及MongoDB做一个项目。之前我们用express和mongoose来查找数组列中的结果,我们使用了如下代码:
我正在使用nestJS + TypeORM和MongoDB创建一个REST API。我遇到的问题是,每当我对findOne进行GET调用或查找实体/表中的所有项时,都会出现错误,要么是说无法读取未定义的属性'prototype',要么是TypeError:“instanceof”的右侧不是对象。
我的实体

@Entity({ name: 'discordconfigs' })
export class DiscordConfig extends BaseEntity {
  @ObjectIdColumn()
  _id: ObjectID;

  @Column()
  clientId: string;
}

REPO的DI(服务文件中的内部构造函数)

@InjectRepository(DiscordConfig)
    private guildConfigRepository: MongoRepository<DiscordConfig>,

通常,当使用NestJS + TypeORM和SQL数据库时,我可以使用下面的代码片段来返回数组中的所有项。使用MongoDB执行此操作会导致错误Cannot read property 'prototype' of undefined,并且不会返回任何内容。return this.guildConfigRepository.find();
我可以将上面的代码更改为这个,它会将所需的数据返回给我,但会导致抛出相同的错误,而不是我认为它只是一个警告,而不是一个错误。

return await this.guildConfigRepository
      .createCursor(this.guildConfigRepository.find())
      .toArray();

如果我想返回一个特定的项目,那么我已经尝试使用这个,但我得到一个错误TypeError:“instanceof”的右边不是一个对象。我控制台记录+检查了传入的参数类型,它是我作为参数输入的正确数据,也是一个字符串。
return await this.guildConfigRepository.findOne({ clientId });
我能够POST数据并将其保存到数据库中而不会导致任何错误。如果我将数据库类型更改为MYSQL数据库,并使用正常的TypeORM方式调用存储库,则不会出现任何错误。
我将如何使用typeORM修复这个问题,或者使用mongoose会更容易吗?我正在考虑切换到mongoose,但是我想让typeORM工作,因为它与nestJS本机工作。
下面是我如何连接到数据库(在应用程序模块中的内部导入)

TypeOrmModule.forRoot({
      type: 'mongodb',
      url: 'mongoURI',
      database: 'database',
      entities: entities,
      synchronize: true,
    }),

如果我用这样的连接设置将其切换到MYSQL数据库,我的API工作起来没有任何错误。

TypeOrmModule.forRoot({
      type: 'mysql',
      host: 'ipaddress',
      port: 3306,
      username: 'userLogin',
      password: 'userPassword',
      database: 'databaseName',
      entities: entities,
      synchronize: true,
    }),
zrfyljdw

zrfyljdw2#

你可以使用Mongoose来代替TypeORM,你只需要改变一些文件中的一些配置。Mongoose与MongoDB的集成非常容易理解。这里是配置和使用的文档链接:https://docs.nestjs.com/recipes/mongodb#mongodb-mongoose

相关问题