首页 > 解决方案 > 如何在不先加载数据的情况下过滤数据?

问题描述

我正在使用 nestjs-typeorm 并希望根据一些参考过滤掉嵌套数据。该代码首先加载整个数据库,然后过滤所需的结果。如何在不加载整个数据库表的情况下过滤掉所需的数据,使其更高效、更快速?

服务.ts

public async uploadedFiles(fileReferenceParams: ReferenceFilterParams): Promise<UploadedFilesEntity[]> {
    try {
      const manager = getManager();
      const trees = await manager.getTreeRepository(UploadedFilesEntity).findTrees();
      this.uploadedFilesRepository.createQueryBuilder()
      const rootFiles = trees.filter(tree => ( tree.isDeleted==false||null && tree.referenceID == fileReferenceParams.referenceID && tree.referenceType == fileReferenceParams.referenceType));
      return rootFiles;
    } catch (error) {
      return error;
    }
  }

标签: typescriptgraphqlnestjstypeormtree-structure

解决方案


您可以使用createQueryBuilderTypeORM 在 SQL 中进行过滤,而无需使用后查询过滤器。

const trees = await this.repository.createQueryBuilder('tree')
    .where('tree.isDeleted IS FALSE OR NULL')
    .andWhere('tree.referenceID = :referenceId', { referenceId: fileReferenceParams.referenceID })
    .andWhere('tree.referenceType = :referenceType', { referenceType: fileReferenceParams.referenceType })
    .getMany();

在TypeORM 文档中了解有关查询生成器的更多信息,以使用 SQL 搜索参数执行查询


推荐阅读