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

构建匹配Mongoose Schema的GraphQL对象数组查询遇阻

匹配Mongoose Schema的GraphQL类型定义调整方案

你的核心问题是原GraphQL类型把experience定义成了字符串,但实际数据和Mongoose Schema里它是一个嵌套的对象结构,下面是对应的调整方案:

1. 拆解最内层类型

先定义对应单个项目项的类型,匹配数据里带title的对象:

type ProjectItem {
  title: String
}

2. 定义过往项目条目类型

pastProjects数组的每个元素是一个以数字为键的对象,分两种场景处理:

  • 如果数字键是固定值(比如只有1、2):由于GraphQL字段名不能以纯数字开头,给字段加下划线前缀区分:
type PastProjectEntry {
  "编号1对应的项目列表"
  _1: [ProjectItem]
  "编号2对应的项目列表"
  _2: [ProjectItem]
}
  • 如果数字键是动态的(可能新增更多编号):使用JSON标量类型接收整个对象(需要确保你的GraphQL服务支持JSON标量,比如引入graphql-scalars包):
scalar JSON

type PastProjectEntry {
  projects: JSON
}

3. 组装完整的GraphQL类型

把嵌套结构逐层拼接,替换原错误的字符串类型:

export const typeDefs = gql`
  scalar JSON

  type ProjectItem {
    title: String
  }

  type PastProjectEntry {
    _1: [ProjectItem]
    _2: [ProjectItem]
    # 动态键场景替换为:projects: JSON
  }

  type ExperienceDetails {
    pastProjects: [PastProjectEntry]
  }

  type Experience {
    experience: ExperienceDetails
  }

  type Query {
    experiences: [Experience]
  }
`;

额外提示

在resolver中直接返回Mongoose的查询结果即可,GraphQL会自动完成字段映射;如果使用JSON类型,返回的对象会直接以JSON格式传递给前端。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 20:25:22