You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NestJS框架下如何为复杂嵌套数组定义正确的GraphQL返回类型

NestJS GraphQL 嵌套数组返回字段为null 解决方案
  • 第一点:你定义的 GraphQL 对象类型字段未添加 @Field() 装饰器,NestJS 不会自动映射未标注的字段,所以返回值直接为 null
  • 第二点:你当前的原始返回数据是二维数组结构,和你定义的 Grouped 对象结构不匹配,字段无法对应上

步骤1:修正 ObjectType 类型定义

给所有需要暴露的 GraphQL 字段添加 @Field() 装饰器,代码如下:

import { ObjectType, Field } from '@nestjs/graphql';

@ObjectType()
export class Grouped {
  @Field()
  Id: string;

  @Field(() => [SumPerDay])
  SumPerDay: SumPerDay[];
}

@ObjectType()
class SumPerDay {
  @Field()
  x: string;

  @Field()
  y: number;
}

步骤2:转换原始数据结构,适配 Grouped 类型

你当前的原始数据是二维数组结构,每个子项格式为 [{ Id: 'xxx' }, [[{x:xxx,y:xxx}], ...]],需要先转换为符合 Grouped 定义的对象数组,同时把嵌套两层的日统计数组拍平:

// 假设你从数据库/接口拿到的原始数据为 rawData
const formattedData = rawData.map(item => {
  return {
    Id: item[0].Id,
    // 原始日统计数据嵌套了两层,用flat()拍平一层
    SumPerDay: item[1].flat()
  }
})

步骤3:在Resolver中返回转换后的数据

确认你的解析器方法返回值为转换后的 formattedData,且返回类型声明为 Grouped[]:

@Query(() => [Grouped])
async getGroupedData() {
  const rawData = await yourDataFetchMethod(); // 你的原始数据获取逻辑
  const formattedData = rawData.map(item => ({
    Id: item[0].Id,
    SumPerDay: item[1].flat()
  }))
  return formattedData;
}

内容的提问来源于stack exchange,提问作者Royal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 19:24:07