Typescript Nestjs从实体类创建自定义json响应

Typescript Nestjs从实体类创建自定义json响应,typescript,serialization,nestjs,typeorm,class-transformer,Typescript,Serialization,Nestjs,Typeorm,Class Transformer,我正在使用typeorm和MySQL。我的实体存储不同类型的体育数据,如足球、田径->100米、200米、400米 在get调用中,我需要按游戏类型分组数据,即田径或足球,并创建嵌套的JSON,如下所示 JSON格式: { 我的实体类如下所示: @Entity('competition') export class CompetitionEntity { @PrimaryGeneratedColumn() id:Number @Column({ type: 'tim

我正在使用typeorm和MySQL。我的实体存储不同类型的体育数据,如足球、田径->100米、200米、400米

在get调用中,我需要按游戏类型分组数据,即田径或足球,并创建嵌套的JSON,如下所示

JSON格式: {

我的实体类如下所示:

  @Entity('competition')
export class CompetitionEntity {
    @PrimaryGeneratedColumn()
    id:Number

    @Column({ type: 'timestamp', default: () => "CURRENT_TIMESTAMP"})
    date:Date

    @Column()
    location:String

    @Column()
    rank:Number

    @Column()
    eventType: string

    @Column()
    minutes: number

    @Column()
    seconds: number

    @Column()
    miliseconds: number

    @Column()
    gameType: string  //it can take values like athletics or football or baseball etc

    @Column()
    gameSubType: string //it can take value like 100m, 200m, relay etc
}
在服务中,我编写了这样的代码来获取竞争表中的所有数据

    const qb = await getRepository(CompetitionEntity)
        .createQueryBuilder('competition')


    const competitions = await qb.getMany();
在获得结果表单数据库之后,我希望按gameType列对数据进行分组,并将其作为嵌套的json发送

请在这方面指导我


谢谢大家

您可以通过这种方式对结果集和结果组进行迭代

const competities=等待qb.getMany()。然后(结果=>{
返回结果。减少((上一个,当前)=>{
如果(!上一个[当前游戏类型]){
上一个[当前游戏类型]=[];
}
上一个[当前游戏类型]。推送(当前);
返回上一个;
}, {})
});

您可以通过这种方式对结果集和结果组进行迭代

const competities=等待qb.getMany()。然后(结果=>{
返回结果。减少((上一个,当前)=>{
如果(!上一个[当前游戏类型]){
上一个[当前游戏类型]=[];
}
上一个[当前游戏类型]。推送(当前);
返回上一个;
}, {})
});

您的解决方案对我很有帮助,但服务中方法的返回类型是什么?因为此逻辑在最后创建了对象。现在,我得到TS2740:type“{}”缺少类型“”中的以下属性:length、pop、push、concat和26…async getAllCompetition(userId:number):Promise{return competities}返回的类型是object:
{}
。执行此代码的函数需要数组,但所需的结构是object以这种方式增强函数
async getAllCompetition(userId:number):Promise{return competities}
或完全删除返回类型
async getAllCompetition(userId:number){return competities}
我的问题似乎已经解决了。最后一个问题是,如果我想要返回entitytype的arry(例如:CompetitionEntity[]),该怎么办分组数据后…我需要如何更改json响应和代码您的解决方案对我很有帮助,但服务中方法的返回类型是什么?因为此逻辑在末尾创建对象。现在我得到TS2740:类型“{}”缺少类型“”中的以下属性:长度、pop、push、concat和26…异步getAllCompetition(userId:number):Promise{return competities}返回的类型是object:
{}
。执行此代码的函数需要数组,但所需的结构是object以这种方式增强函数
异步getAllCompetition(userId:number):Promise{return competities}
或完全删除返回类型
异步getAllCompetition(userId:number){return competities}
我的问题似乎已经解决了。最后一个问题是,如果我想在分组数据后返回entitytype(例如:CompetitionEntity[]),我需要如何更改json响应和代码
    const qb = await getRepository(CompetitionEntity)
        .createQueryBuilder('competition')


    const competitions = await qb.getMany();