NestJS TypeORM MongoDB不能使用find或FindOne来搜索存储库



我正在与MongoDB的NestJs和TypeORM项目合作。早些时候,我们使用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时,我可以使用下面的代码片段返回数组中的所有项。用MongoDB这样做会导致错误无法读取未定义的属性"原型",并且不返回任何东西。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本地工作。

这是我如何连接到DB(内部导入在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,
}),

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

最新更新