构建匹配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
相关产品推荐
相关产品推荐

