如何在 AWS Amplify GraphQL 客户端中进行过滤
How to do filteration in AWS Amplify GraphQL Client
我正在尝试使用 Amplify GraphQL Client 实现 GraphQL 过滤器。我得到了一个待办事项列表,并想检索状态已完成的待办事项列表。
文档只展示了如何获取所有项目和单个项目
const allTodos = await API.graphql(graphqlOperation(queries.listTodos));
console.log(allTodos);
有人可以告诉我如何对 listTodos 应用过滤器,以便它 return 仅具有完成状态的待办事项。
我尝试执行以下操作,但它是错误的。
API.graphql(graphqlOperation(queries.listTodos(filter: {
status: {
eq: "completed"
}
})));
我想我可以回答你的问题,但我也有一个关于 AWS Amplify codegen
查询、变更等的类似问题。如果你查看 [= 中生成的代码13=]文件夹,你会发现一个类似这样的声明文件:
export const listOrganizations = `query ListOrganizations(
$filter: ModelOrganizationFilterInput
$limit: Int
$nextToken: String
) {
listOrganizations(filter: $filter, limit: $limit, nextToken: $nextToken) {
items {
id
name
address
}
nextToken
}
}
`;
您可以在此处看到 ListOrganizations
查询的第一个参数(在您的例子中,ListTodos
查询)采用第一个参数 filter: $filter
。到目前为止,我已经知道您可以通过执行以下操作来修改此查询...
API.graphql(graphqlOperation(queries.listTodos, {
filter: {
status: {
eq: "completed"
}
}
})));
这应该过滤掉所有待办事项,除了 status
等于 completed
的待办事项。我遇到的问题是我想启用不同级别的访问控制,这样 Cognito 用户池组 Admin
的任何人都可以查看 @model
以及 @owner
。我能够使用 @auth
变换器使这一切正常工作,但现在我的问题是,在某些屏幕上,我只想显示某些实体,这些实体是该实体的 owner
,因为我是还有一个 Admin
,API 默认让我得到一切。我想使用此 @filter
或 ModelOrganizationFilterInput
仅向我提供我是所有者的数据。我发现这样做的唯一方法是将 owner
字段添加到我的架构中,但是 API 总是提供所有者字段,我想过滤掉该字段。
我能找到的关于 aws-amplify
API
和 graphqlOperation
方法的唯一文档在这里:https://aws-amplify.github.io/docs/js/api 但是例子不多,而且他们没有没有显示 API 在客户端上的工作原理。我卡住了。
我正在尝试使用 Amplify GraphQL Client 实现 GraphQL 过滤器。我得到了一个待办事项列表,并想检索状态已完成的待办事项列表。
文档只展示了如何获取所有项目和单个项目
const allTodos = await API.graphql(graphqlOperation(queries.listTodos));
console.log(allTodos);
有人可以告诉我如何对 listTodos 应用过滤器,以便它 return 仅具有完成状态的待办事项。
我尝试执行以下操作,但它是错误的。
API.graphql(graphqlOperation(queries.listTodos(filter: {
status: {
eq: "completed"
}
})));
我想我可以回答你的问题,但我也有一个关于 AWS Amplify codegen
查询、变更等的类似问题。如果你查看 [= 中生成的代码13=]文件夹,你会发现一个类似这样的声明文件:
export const listOrganizations = `query ListOrganizations(
$filter: ModelOrganizationFilterInput
$limit: Int
$nextToken: String
) {
listOrganizations(filter: $filter, limit: $limit, nextToken: $nextToken) {
items {
id
name
address
}
nextToken
}
}
`;
您可以在此处看到 ListOrganizations
查询的第一个参数(在您的例子中,ListTodos
查询)采用第一个参数 filter: $filter
。到目前为止,我已经知道您可以通过执行以下操作来修改此查询...
API.graphql(graphqlOperation(queries.listTodos, {
filter: {
status: {
eq: "completed"
}
}
})));
这应该过滤掉所有待办事项,除了 status
等于 completed
的待办事项。我遇到的问题是我想启用不同级别的访问控制,这样 Cognito 用户池组 Admin
的任何人都可以查看 @model
以及 @owner
。我能够使用 @auth
变换器使这一切正常工作,但现在我的问题是,在某些屏幕上,我只想显示某些实体,这些实体是该实体的 owner
,因为我是还有一个 Admin
,API 默认让我得到一切。我想使用此 @filter
或 ModelOrganizationFilterInput
仅向我提供我是所有者的数据。我发现这样做的唯一方法是将 owner
字段添加到我的架构中,但是 API 总是提供所有者字段,我想过滤掉该字段。
我能找到的关于 aws-amplify
API
和 graphqlOperation
方法的唯一文档在这里:https://aws-amplify.github.io/docs/js/api 但是例子不多,而且他们没有没有显示 API 在客户端上的工作原理。我卡住了。