如何在GraphQL中仅返回大型查询的子集而非全部查询结果
实现方式
GraphQL本身就支持精确指定返回字段,你没写在查询里的字段,服务端根本不会返回,完全不需要额外配置特殊逻辑。
好友查询示例调整
你现在写的查询同时选了当前用户的name和好友的friends.name,所以结果会带上Joe自己的名字。要实现和你写的Cypher一样仅返回好友姓名的效果,直接把外层多余的name字段删掉就行:
入参(和原来一致不需要改)
{ "where": { "name": "Joe" } }
修改后的查询语句
query Query($where: NameWhere) { names(where: $where) { friends { name } } }
改完之后返回结果就只会包含好友列表,不会出现Joe自己的名字字段。
深层嵌套、多冗余字段场景处理
不管你的图数据关联嵌套多少层,或是有多少你不需要的冗余字段(比如你提到的本地化场景里的国家、语言编码字段),处理逻辑完全一样:
- 顺着关联关系路径,只把你最终需要的字段写进查询的大括号里,所有不需要的字段一概不写
- 中间关联层的无关字段不需要选,不会影响你拿到深层子字段的结果,也不会返回多余内容
拿你说的本地化拼写场景举个例子,如果只需要对应环境的拼写结果(比如英式的colour/美式的color),不需要返回国家、语言编码这类冗余信息,直接只选目标内容字段即可:
query GetLocalizedSpelling($where: LocaleWhere) { word(where: $where) { spelling } }
别把GraphQL的查询逻辑和Cypher/SQL搞混:它不是先查出整个关联实体再给你过滤字段,而是从请求解析阶段就只会去取你明确声明要的字段,没写的字段既不会查库也不会出现在返回结果里,根本没有“必须带上层对象字段”的强制要求。
内容的提问来源于stack exchange,提问作者ctwheels
相关产品推荐
相关产品推荐

