如何通过AppSync生成的查询获取嵌套数据?
问题描述
我有如下GraphQL Schema:
type Post @model { id: ID! title: String! content: String! comments: [Comment] @hasMany(indexName: "byPost", fields: ["id"]) } type Comment @model { id: ID! message: String post: Post @belongsTo(fields: ["postID"]) postID: ID @index(name: "byPost") }
AppSync自动生成了listPosts查询:
export const listPosts = /* GraphQL */ ` query ListPosts( $filter: ModelPostFilterInput $limit: Int $nextToken: String ) { listPosts(filter: $filter, limit: $limit, nextToken: $nextToken) { items { id title content comments { nextToken } createdAt updatedAt } nextToken } } `;
调用代码如下:
const postData = await API.graphql({ query: listPosts, });
数据库中存在与帖子关联的评论,但返回结果仅显示comments: { nextToken: null },无法获取实际评论数据,如何获取嵌套的评论内容?
解决方法
问题根源在于自动生成的查询仅请求了comments的nextToken字段,未指定评论的具体内容字段。需要修改GraphQL查询,明确声明要获取的Comment字段:
修改后的listPosts查询:
export const listPosts = /* GraphQL */ ` query ListPosts( $filter: ModelPostFilterInput $limit: Int $nextToken: String ) { listPosts(filter: $filter, limit: $limit, nextToken: $nextToken) { items { id title content comments { items { id message postID createdAt updatedAt } nextToken } createdAt updatedAt } nextToken } } `;
- 关联的
comments属于分页集合,必须先获取items数组,再在其中指定要返回的Comment字段(如id、message等) - 若评论数量较多,可给
comments传入limit和nextToken参数实现分页查询,示例:comments(limit: 10, nextToken: $commentNextToken)
修改完成后重新调用查询,即可获取到对应的嵌套评论数据。
内容的提问来源于stack exchange,提问作者eugenekr
相关产品推荐
相关产品推荐

