【发布时间】:2019-09-07 01:45:20
【问题描述】:
我正在为 Graphql/AppSync 使用 AWS Amplify(前端使用 Cli 和 Angular 7)并且想知道当超过 10 个项目时如何获取所有连接的项目?
假设我创建了一个这样的 schema.graphql:
type User @model {
id: ID!
firstname: String
lastname: String
project: Project @connection(name: "ProjectUsers")
}
type Project @model {
id: ID!
title: String
task: String
members: [User] @connection(name: "ProjectUsers")
}
运行放大推送时,它会生成查询和突变。当使用项目 id(来自生成的 API.service.ts 文件)运行 GetProject 查询时,它会返回带有连接用户的项目项。但是如果项目有超过 10 个用户,它只会给我前 10 个用户和下一个令牌:
{
id: "67b1fc0a-fd1f-4e8b-9bd7-b82b2aea5d3b",
title: "Test",
task: "test",
members: {
items: {
0: {__typename: "User", id: "f245809a...}
1: ...
(2-8: ...)
9: ...
nextToken: "qwerj23r2kj....3223oop32kjo",
__typename: "ModelUserConnection";
}
}
__typename: "Project"
}
我可以看到多种解决方案,但不知道如何去做:
是否可以更改 schema.grapql 以更改 codegen 以便它可以生成更改限制的能力,例如。 100 而不是标准的 10?
使用 nextToken 对生成的 API.service.ts 文件中的结果进行分页?
更改 schema.graphql 文件,使生成的 ModelUserFilterInput 具有 userProjectId 字段(用于生成的 ListUsers 查询)?
或者是否有任何其他解决方案可以通过自动生成的文件 (API.service.ts) 中的查询来获取项目的所有用户?
到目前为止,我能看到的唯一解决方案是首先运行 ListUsers 查询(不带任何过滤器),然后遍历所有查询以检查它是否具有正确的项目 ID。但是如果用户数据库很大,这可能会增长为大量数据并且非常慢,并且使用@connection 的好处并不真正存在。
很抱歉发了很长的帖子,我希望我已经充分解释了这个问题。
【问题讨论】:
标签: angular aws-appsync aws-amplify