NestJS TypeORM MongoDB 无法使用 find 或 FindOne 搜索存储库
Posted
技术标签:
【中文标题】NestJS TypeORM MongoDB 无法使用 find 或 FindOne 搜索存储库【英文标题】:NestJS TypeORM MongoDB can not use find or FindOne to search repository 【发布时间】:2021-10-12 11:02:15 【问题描述】:我正在使用 NestJs 和 TypeORM 和 MongoDB 开展一个项目。早些时候我们使用 express 和 mongoose 并在数组列中查找结果,我们使用了这样的东西:
我正在使用nestJS + TypeORM 和MongoDB 创建一个REST API。我遇到的问题是,每当我对 findOne 进行 GET 调用或在实体/表中查找所有项目时,都会导致错误提示无法读取未定义的属性“原型”或 TypeError:“instanceof”的右侧是不是一个对象。
我的实体
@Entity( name: 'discordconfigs' )
export class DiscordConfig extends BaseEntity
@ObjectIdColumn()
_id: ObjectID;
@Column()
clientId: string;
REPO 的 DI(服务文件中的内部构造函数)
@InjectRepository(DiscordConfig)
private guildConfigRepository: MongoRepository<DiscordConfig>,
通常,当使用带有 SQL 数据库的 NestJS + TypeORM 时,我可以使用下面的代码 sn-p 来返回数组中的所有项目。对 MongoDB 执行此操作会导致错误无法读取未定义的属性“原型”并且不返回任何内容。
return this.guildConfigRepository.find();
我可以将上面的内容更改为这个,它会将所需的数据返回给我,但会导致抛出相同的错误,而不是我认为这只是一个警告而不是错误。
return await this.guildConfigRepository
.createCursor(this.guildConfigRepository.find())
.toArray();
如果我想返回一个特定的项目,那么我尝试使用它,但我得到一个错误 TypeError: 'instanceof' 的右侧不是对象。我在控制台记录了 + 检查了传入参数的类型,这是我作为参数和字符串输入的正确数据。
return await this.guildConfigRepository.findOne( clientId );
我能够发布数据并将其保存到数据库中而不会导致任何错误。如果我将我的数据库类型更改为 mysql 数据库并使用正常的 TypeORM 方式调用存储库,那么我不会收到任何错误。
我将如何使用 typeORM 来解决这个问题,或者使用 mongoose 会更容易。我正在考虑改用 mongoose,但我想让 typeORM 工作,因为它可以与 nestJS 一起使用。
这是我连接到数据库的方式(App.Module 中的内部导入)
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,
),
【问题讨论】:
【参考方案1】:试试本帖末尾的方法:
https://github.com/nestjs/typeorm/issues/405
【讨论】:
以上是关于NestJS TypeORM MongoDB 无法使用 find 或 FindOne 搜索存储库的主要内容,如果未能解决你的问题,请参考以下文章
NestJS/TypeORM:无法读取未定义的属性“createQueryBuilder”
无法使用 typeorm (NestJS) 在 SQL Server 中插入 bigint
错误:使用 Nestjs + Graphql + Typeorm 时无法确定 GraphQL 输入类型
使用 Typeorm 连接到 Nestjs 中的 mssql,但 Nest 无法解析 EmployeeRepository 的依赖关系