如何在AWS Amplify GraphQL Client中进行过滤

时间:2018-12-27 15:43:48

标签: reactjs react-native graphql aws-appsync aws-amplify

我正在尝试使用Amplify GraphQL Client实现GraphQL过滤器。我有待办事项清单,想检索状态已完成的待办事项清单。

文档仅显示如何获取所有项目和单个项目

const allTodos = await API.graphql(graphqlOperation(queries.listTodos));
console.log(allTodos);

有人可以指出如何将过滤器应用于listTodos,以便它返回仅具有完成状态的待办事项。

我尝试执行以下操作,但这是错误的。

API.graphql(graphqlOperation(queries.listTodos(filter: {
    status: {
        eq: "completed"
    }
})));

1 个答案:

答案 0 :(得分:0)

我想我对您的问题有一个答案,但是对于AWS Amplify codegen查询,突变等,我也有一个类似的问题。如果您查看在{{1}内部生成的代码}文件夹,您将找到与此类似的声明文件:

~/graphql

您可以在此处看到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,API默认为我提供所有信息。我想使用此Admin@filter仅向我提供所有者所在的数据。我发现这样做的唯一方法是将ModelOrganizationFilterInput字段添加到我的架构中,但是API始终提供了owner字段,而我想将该字段过滤掉。

我可以找到关于owner aws-amplifyAPI方法的唯一文档,这里是:https://aws-amplify.github.io/docs/js/api,但是示例不多,没有显示API在客户端上的大部分工作方式。我被卡住了。