Realm GraphQL API使用GraphQL别名查询时返回null值问题
MongoDB Atlas App Service GraphQL 字段别名查询返回null异常
问题描述
我是MongoDB与GraphQL的新手,近期尝试使用Atlas App Service GraphQL API开发小型项目,计划通过已在其他GraphQL API上验证可用的SwiftGraphQL库,实现iOS应用与数据库的对接,目前遇到GraphQL别名相关异常,具体表现如下:
- 执行无别名的基础查询可正常返回预期结果
查询语句:
返回结果:query { event { action } }{ "data": { "event": { "action": "create" } } } - 当对
action字段添加别名后,对应别名字段返回null值
查询语句:
返回结果:query { event { something: action } }{ "data": { "event": { "something": null } } } - 所用SwiftGraphQL库自动生成的带别名查询,同样返回null值
查询语句:
返回结果:query { __typename eventsquery__kpaue1a96yh4: events { __typename actionevent__1tnikdq0kcc8m: action } }{ "data": { "__typename": "Query", "eventsquery__kpaue1a96yh4": [ { "__typename": "Event", "actionevent__1tnikdq0kcc8m": null }, { "__typename": "Event", "actionevent__1tnikdq0kcc8m": null }, { "__typename": "Event", "actionevent__1tnikdq0kcc8m": null } ] } }
我参照GraphQL官方文档提供的别名语法编写查询,先后在MongoDB官网内置的GraphiQL客户端、Apollo Sandbox中执行上述查询,均得到相同的异常返回结果。
当前环境版本
- Server Version: 92757fe55f
- UI Version: 4.49.10
- JS SDK Version: 3.18.0
- Cluster Version: 5.0.9
待确认问题
Realm GraphQL API是否不支持GraphQL别名功能,还是我的操作存在配置或写法错误?恳请提供相关排查建议。
解答
问题结论
不是你写法的问题,是旧版本Atlas App Service(原Realm)GraphQL API的已知限制:2022年下半年之前创建部署的App Service实例,GraphQL解析层没做字段别名的映射逻辑,只要给字段加别名,原字段的值就不会映射到别名key上,直接返回null。其中顶层查询/变更的别名部分支持,嵌套字段别名完全不生效,这也是你测试里顶层events别名能拿到数组、内部action别名全是null的原因。
排查&解决步骤
- 重新部署App Service应用
打开Atlas控制台进入对应App Service管理页,点右上角的「部署」,选择「重新部署」,拉取最新的服务端运行时。字段别名的支持补丁在2022年第三季度就全量推送了,重新部署不需要改任何权限规则或Schema配置,别名查询就能正常返回值。 - 修复验证
部署完成后先在内置GraphiQL里跑最简单的别名测试查询:
返回结果里query { event { something: action } }something字段能拿到原本action的值就说明修复生效,之后SwiftGraphQL自动生成的带别名查询也能正常工作。 - 重部署后仍异常的排查点
- 检查对应集合的权限规则,确认
action字段没有被规则限制访问,GraphQL权限校验是按原字段名判断的,和别名无关,只要原字段有权限,别名映射就不会出问题 - 别名不要用除字母、数字、下划线之外的特殊字符,旧版本解析层对特殊字符别名有兼容问题
- 如果你用的是只读数据源、联合数据源对接的GraphQL接口,这类数据源的别名支持上线时间晚于标准Atlas集合,需要提工单让后台手动同步实例的运行时版本
- 检查对应集合的权限规则,确认
临时规避方案
如果暂时没法重新部署实例,可以在SwiftGraphQL的配置里关掉自动别名生成,手写不带别名的查询语句就能正常拿返回值,缺点是单次查询里没法对同名字段发起多次不同参数的查询。
内容的提问来源于stack exchange,提问作者Teddy Bersentes
相关产品推荐
相关产品推荐

