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

如何将GraphQL中Event的Category数组转为单个对象?

解决GraphQL中Event分类从数组转为单个对象的问题

要实现你想要的结果,需要从Schema定义和Resolver逻辑两方面修改:

1. 修改GraphQL Schema

首先把Event类型里的category从数组类型改成单个Category类型(如果每个Event必然有分类,保留!标记非空;如果允许无分类,去掉!):

type Event {
    _id: String!
    name: String!
    category: Category! # 去掉数组包裹,定义为单个分类对象
}

2. 修改Resolver代码

原来的Resolver用filter返回的是数组,现在要改成直接返回单个分类对象,同时优化查询逻辑(没必要查询所有分类再过滤,直接根据ID查询更高效):

export const Event = {
    category: async (parent, args, context, info) => {
        // 若parent.category存储的是单个分类ID,直接查单个文档
        return await Category.findById(parent.category);
        
        // 如果你之前parent.category是数组格式(比如[分类ID]),则取第一个元素:
        // return await Category.findById(parent.category[0]);
    }
}

为什么你之前的方法没用?

你尝试的return { ...category }本质是把数组展开成带索引的对象(比如{0: 分类对象}),但一方面这个结构和Schema定义的数组类型不匹配,另一方面GraphQL会严格按照Schema的类型返回结果——只要Schema定义的是数组,哪怕你返回单个对象,它也会自动包裹成数组。必须先修改Schema的类型定义,再让Resolver返回对应类型的单个对象,才能得到你想要的格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 15:32:26